はじめに
この実験では、Long クラスの Java の reverseBytes() メソッドについて学びます。このメソッドは、渡された long 値の 2 の補数の 2 進数表現のバイトの順序を逆にするために使用されます。
Java クラスを作成する
まず、~/project ディレクトリに Java クラスを作成する必要があります。そのクラス名を ReverseBytesDemo.java としましょう。
public class ReverseBytesDemo {
}
main メソッドを追加する
次に、クラスに main メソッドを追加する必要があります。これがプログラムのエントリーポイントになります。
public static void main(String[] args) {
}
reverseBytes() メソッドを使用する
さて、long 値のバイトを逆にするために reverseBytes() メソッドを使用してみましょう。
long a = 342;
long reversedValue = Long.reverseBytes(a);
System.out.println("Original value: " + a);
System.out.println("Reversed value: " + reversedValue);
このコードの出力は以下の通りです。
Original value: 342
Reversed value: 6197234562238513152
ユーザー入力を使用する
また、ユーザー入力を受け取り、入力値のバイトを逆にすることもできます。ユーザー入力を受け取るようにコードを修正してみましょう。
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a number: ");
long userInput = scanner.nextLong();
long reversedValue = Long.reverseBytes(userInput);
System.out.println("Original value: " + userInput);
System.out.println("Reversed value: " + reversedValue);
このコードは、ユーザーに数字を入力するように促し、その後、入力値のバイトを逆にします。javac ReverseBytesDemo.java && java ReverseBytesDemo コマンドを使用してコードを実行します。
例外の処理
ユーザー入力を受け取る際に発生する可能性のある例外を、try-catch ブロックを使って処理することができます。
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Enter a number: ");
long userInput = scanner.nextLong();
long reversedValue = Long.reverseBytes(userInput);
System.out.println("Original value: " + userInput);
System.out.println("Reversed value: " + reversedValue);
} catch (InputMismatchException e) {
System.out.println("Invalid input. Please enter a valid number.");
}
このコードは、ユーザーが無効な入力を入力した場合に発生する可能性のある例外を処理するために try-catch ブロックを使用しています。
負の値のテスト
負の数を使って reverseBytes() メソッドをテストしてみましょう。
long a = -23;
long reversedValue = Long.reverseBytes(a);
System.out.println("Original value: " + a);
System.out.println("Reversed value: " + reversedValue);
このコードの出力は以下の通りです。
Original value: -23
Reversed value: -1585267068834414593
2 進数表現の出力
元の値と逆転させた値の 2 進数表現を、Long.toBinaryString() メソッドを使って出力することもできます。
System.out.println("Original value in binary: " + Long.toBinaryString(a));
System.out.println("Reversed value in binary: " + Long.toBinaryString(reversedValue));
このコードの出力は以下の通りです。
Original value in binary: 1111111111111111111111111111111111111111111111111111111111101001
Reversed value in binary: 1010101100000000000000000000000000000000000000000000000000000000
逆転させた値の 2 進数表現は、8 ビットごとに逆転させた元の 2 進数表現であることに注意してください。
ユーザー定義関数の使用
reverseBytes() メソッドをカプセル化するためのユーザー定義関数を書いてみましょう。
public class ReverseBytesDemo {
public static long reverseBytes(long value) {
return Long.reverseBytes(value);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Enter a number: ");
long userInput = scanner.nextLong();
long reversedValue = reverseBytes(userInput);
System.out.println("Original value: " + userInput);
System.out.println("Reversed value: " + reversedValue);
System.out.println("Original value in binary: " + Long.toBinaryString(userInput));
System.out.println("Reversed value in binary: " + Long.toBinaryString(reversedValue));
} catch (InputMismatchException e) {
System.out.println("Invalid input. Please enter a valid number.");
}
}
}
ユーザー定義関数の実行
ユーザー定義関数をセットアップしたので、修正した main() メソッドを再度実行することでテストすることができます。
Scanner scanner = new Scanner(System.in);
try {
System.out.print("Enter a number: ");
long userInput = scanner.nextLong();
long reversedValue = reverseBytes(userInput);
System.out.println("Original value: " + userInput);
System.out.println("Reversed value: " + reversedValue);
System.out.println("Original value in binary: " + Long.toBinaryString(userInput));
System.out.println("Reversed value in binary: " + Long.toBinaryString(reversedValue));
} catch (InputMismatchException e) {
System.out.println("Invalid input. Please enter a valid number.");
}
javac ReverseBytesDemo.java && java ReverseBytesDemo コマンドを使ってコードを実行します。
まとめ
この実験では、long 型の値の 2 の補数 2 進数表現のバイトの順序を逆にするために使用される Long クラスの Java の reverseBytes() メソッドについて学びました。また、ユーザー入力の使い方、例外の処理、2 進数表現の出力、およびユーザー定義関数にメソッドをカプセル化する方法についても学びました。これらの手順に従うことで、自分自身の Java プログラムで reverseBytes() メソッドを使用できるようになったはずです。



