4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 23

Javaで整数⇔2進数の変換

Posted at

AtCoderの問題などを解いていると整数と2進数の相互変換する機会があるので方法をメモ。

参考

全体のコード

整数を2進数に変換し、その後再び整数に戻すプロセスを実行しているコードが以下。
この例では、整数17を2進数に変換し、その2進数を再度整数に変換している。

import java.util.*;

public class ConvertNumberAndBinary {
    static final int BIN_LENGTH = 10; // ビット数の設定
    static final int NUMBER = 17;

    public static void main(String[] args) {
        // 整数 -> 2進数
        int[] bin = number2binary(NUMBER);
        // 2進数 -> 整数
        int num = binary2number(bin);
        System.out.println("17 -> " + Arrays.toString(bin) + " -> " + num);
    }

    private static int[] number2binary(int number) {
        int[] bin = new int[BIN_LENGTH];
        for (int i = 0; i < BIN_LENGTH; i++) {
            int index = BIN_LENGTH - (i + 1);
            int v = 1 << i;
            int rightShifted = number / v;
            bin[index] = rightShifted % 2;
        }
        return bin;
    }

    private static int binary2number(int[] bin) {
        int number = 0;
        for (int i = 0; i < BIN_LENGTH; i++) {
            int index = BIN_LENGTH - (i + 1);
            if (bin[index] == 1) {
                number += (1 << i);
            }
        }
        return number;
    }
}

プログラムの実行結果

実行すると以下の出力が得られる。

17 -> [0, 0, 0, 0, 0, 0, 1, 0, 0, 1] -> 17

この結果は、整数17が2進数 [0, 0, 0, 0, 0, 0, 1, 0, 0, 1] に変換され、再び17に戻されていることを示している。

BIN_LENGTH について補足

このプログラムでは、BIN_LENGTHを10に設定している。
これは、2進数表現で使用するビット数を意味し、この場合は10ビットで表現される。
10ビットで表現できる最大の整数は [tex: 2^{10} - 1 = 1023] となる。

number2binary

number2binaryメソッドは、整数を2進数の配列に変換している。
このメソッドでは、与えられた数値を右シフトしながら、各ビットを計算して配列に格納している。

private static int[] number2binary(int number) {
    int[] bin = new int[BIN_LENGTH];
    for (int i = 0; i < BIN_LENGTH; i++) {
        int index = BIN_LENGTH - (i + 1);
        int v = 1 << i;
        int rightShifted = number / v;
        bin[index] = rightShifted % 2;
    }
    return bin;
}

binary2number

binary2numberメソッドは、2進数を表す整数の配列を受け取り、それを整数に変換する。
配列の各要素を左から右へと走査し、各ビットが1の場合に対応する2の累乗を合計していく。

private static int binary2number(int[] bin) {
    int number = 0;
    for (int i = 0; i < BIN_LENGTH; i++) {
        int index = BIN_LENGTH - (i + 1);
        if (bin[index] == 1) {
            number += (1 << i);
        }
    }
    return number;
}
4
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?