「基数変換」は基本情報技術者試験を受験するなら、必須知識である。
そこで、10進数を2進数、8進数、16進数に変換するプログラムを4つのプログラミング言語で実装した学習用プロジェクトをご紹介しよう。
プログラミング初心者が複数の言語を比較しながら学習できるように、同じ機能を以下の4つの言語で実装している。
- C言語 – 低レベルなプログラミングの基礎
- Go言語 – モダンでシンプルな構文
- Kotlin – オブジェクト指向と関数型の融合
- Rust – 安全性とパフォーマンスの両立
開発環境:GitHub Codespaces
GitHub Codespacesでの実行手順
準備:リポジトリとCodespacesの作成
- GitHubにログインして、新しいリポジトリを作成
- 右上の「+」→「New repository」
- リポジトリ名(例:base-conversion)を入力
- 「Public」または「Private」を選択
- 「Create repository」をクリック
- Codespacesを起動
- リポジトリページで「Code」ボタン→「Codespaces」タブ
- 「Create codespace on main」をクリック
- VS Codeライクな環境が開く
各言語での実行手順
C言語
フォルダとファイルの作成
フォルダ名:C_lang、ファイル名:convert.c
コードの入力
- 左のエクスプローラーから
convert.cを開く - 下記のC言語コードをコピー&ペースト
#include <stdio.h>
int main() {
int num;
printf("10進数を入力してください: ");
scanf("%d", &num);
printf("\n変換結果:\n");
printf("10進数: %d\n", num);
printf("2進数: ");
// 2進数表示(ビット演算を使用)
if (num == 0) {
printf("0");
} else {
int bits = sizeof(int) * 8; // intのビット数
int started = 0; // 最初の1を見つけたかどうか
for (int i = bits - 1; i >= 0; i--) {
int bit = (num >> i) & 1;
if (bit == 1) started = 1;
if (started) printf("%d", bit);
}
}
printf("\n8進数: %o\n", num);
printf("16進数: %X\n", num);
return 0;
}コンパイルと実行
# コンパイル(実行ファイルを作成)
gcc convert.c -o convert_c
# 実行
./convert_c
```
**入力例:**
```
10進数を入力してください: 100実行例
変換結果:
10進数: 100
2進数: 1100100
8進数: 144
16進数: 64Go言語
フォルダ、ファイルの作成
フォルダ名:Go、ファイル名:convert.go
コードの入力
convert.goを開いて下記のGoコードをペースト
package main
import (
"fmt"
"strconv"
)
func main() {
var num int
fmt.Print("10進数を入力してください: ")
fmt.Scan(&num)
fmt.Println("\n変換結果:")
fmt.Printf("10進数: %d\n", num)
fmt.Printf("2進数: %s\n", strconv.FormatInt(int64(num), 2))
fmt.Printf("8進数: %s\n", strconv.FormatInt(int64(num), 8))
fmt.Printf("16進数: %s\n", strconv.FormatInt(int64(num), 16))
}実行
# Goは自動でコンパイルして実行
go run convert.go
```
**入力例:**
```
10進数を入力してください: 100実行例
変換結果:
10進数: 100
2進数: 1100100
8進数: 144
16進数: 64Kotlin
環境準備(初回のみ)
# SDKMANをインストール
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
# Kotlinコンパイラをインストール
sdk install kotlinフォルダとファイルの作成
フォルダ名:Kotlin、ファイル名:convert.kt
コードの入力
convert.kt を開いて下記のKotlinコードをペースト
fun main() {
print("10進数を入力してください: ")
val num = readLine()?.toIntOrNull()
if (num == null) {
println("有効な数値を入力してください")
return
}
println("\n変換結果:")
println("10進数: $num")
println("2進数: ${num.toString(2)}")
println("8進数: ${num.toString(8)}")
println("16進数: ${num.toString(16)}")
}コンパイルと実行
# コンパイル
kotlinc convert.kt -include-runtime -d convert.jar
# 実行
java -jar convert.jar
```
**入力例:**
```
10進数を入力してください: 100実行例
変換結果:
10進数: 100
2進数: 1100100
8進数: 144
16進数: 64. Rust
環境準備(初回のみ)
# Rustをインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 環境変数を読み込み
source $HOME/.cargo/envフォルダとファイルの作成
フォルダ名:Rust、ファイル名:convert.rs
コードの入力
convert.rsを開いて下記のRustコードをペースト
use std::io;
fn main() {
println!("10進数を入力してください: ");
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("入力の読み込みに失敗しました");
let num: i32 = match input.trim().parse() {
Ok(n) => n,
Err(_) => {
println!("有効な数値を入力してください");
return;
}
};
println!("\n変換結果:");
println!("10進数: {}", num);
println!("2進数: {:b}", num);
println!("8進数: {:o}", num);
println!("16進数: {:X}", num);
}コンパイルと実行
# コンパイル
rustc convert.rs
# 実行
./convert
```
**入力例:**
```
10進数を入力してください: 100
実行例
変換結果:
10進数: 100
2進数: 1100100
8進数: 144
16進数: 64プログラムの説明
それぞれの言語での特徴
C言語:
printfの書式指定子(%o,%X)で8進数・16進数を表示- 2進数はビット演算で自作
Go言語:
strconv.FormatInt関数で基数を指定して変換- シンプルで読みやすいコード
Kotlin:
toString(基数)メソッドで簡単に変換- null安全な設計
Rust:
{:b},{:o},{:X}といった書式指定子を使用- エラー処理が厳密
変更をコミット&プッシュ
Codespacesで作業した内容をGitHubに保存(プッシュ)する方法を説明しよう。
変更を確認
ターミナルで以下のコマンドを実行する。
git status変更をステージングに追加
# すべての変更を追加
git add .
# 特定のファイルだけ追加する場合
git add ファイル名コミット(変更を記録)
git commit -m "コミットメッセージ"コミットメッセージの例:
git commit -m "練習用クエリを追加"git commit -m "VIEWを作成"git commit -m "README修正"
ポイント:
- コミットメッセージは何を変更したか分かるように書こう
- 日本語でOK
プッシュ(GitHubに送信)
git push成功すると以下の通り表示される。
Enumerating objects: 14, done.
...
To https://github.com/ユーザー名/mysql-learning
abc1234..def5678 main -> main

コメント