はじめに
numberOfTrailingZeros() メソッドは、渡された long 型の値の最下位の 1 ビット(最右)の直後のゼロ ビットの数を返します。このメソッドは、java.lang パッケージの Long クラスの一部です。
新しい Java ファイルを作成する
ターミナルに次のコマンドを入力して、nano エディタを使って新しい Java ファイルを作成します。
touch ~/project/TrailingZeros.java
Java コードを書く
long 型の値に含まれる末尾のゼロの数を取得するために numberOfTrailingZeros() メソッドを使用するには、次のコードを追加します。
public class TrailingZeros {
public static void main(String[] args) {
// 正数
long num1 = 170L;
System.out.println("元の数は " + num1);
System.out.println("2 進数表現は = " + Long.toBinaryString(num1));
System.out.println("末尾のゼロの数は = " + Long.numberOfTrailingZeros(num1));
// 負数
long num2 = -57L;
System.out.println("元の数は " + num2);
System.out.println("2 進数表現は = " + Long.toBinaryString(num2));
System.out.println("末尾のゼロの数は " + Long.numberOfTrailingZeros(num2));
}
}
コードをコンパイルして実行する
ターミナルで次のコマンドを使用して Java コードをコンパイルします。
javac ~/project/TrailingZeros.java
コンパイルが完了したら、ターミナルで次のコマンドを入力してプログラムを実行します。
java TrailingZeros
プログラムの出力は次のようになります。
元の数は 170
2 進数表現は = 10101010
末尾のゼロの数は = 1
元の数は -57
2 進数表現は = 1111111111111111111111111111111111111111111111111111111111000111
末尾のゼロの数は 0
ユーザ定義入力
また、ユーザからの入力を受け取り、その末尾のゼロの数を返すこともできます。上記の動作を実現するには、次のコードを追加します。
import java.util.Scanner;
public class TrailingZeros {
public static void main(String[] args) {
try {
System.out.println("数値を入力してください:");
Scanner sc = new Scanner(System.in);
long num3 = sc.nextLong();
System.out.println("2 進数表現は = " + Long.toBinaryString(num3));
System.out.println("末尾のゼロの数は " + Long.numberOfTrailingZeros(num3));
} catch (Exception e) {
System.out.println("入力が無効です");
}
}
}
更新されたコードをコンパイルして実行する
ターミナルで次のコマンドを使用して更新された Java コードをコンパイルします。
javac ~/project/TrailingZeros.java
コンパイルが完了したら、ターミナルで次のコマンドを入力して更新されたプログラムを実行します。
java TrailingZeros
プログラムが入力を求めるときは、好きな long 型の値を入力して「Enter」キーを押します。プログラムは、その数の 2 進数表現と末尾のゼロの数を表示します。
まとめ
この実験では、渡された long 型の値に含まれる末尾のゼロの数を返すために numberOfTrailingZeros() メソッドをどのように使用するかを学びました。また、ユーザからの入力を受け取り、その末尾のゼロの数を返すユーザ定義入力プログラムも作成しました。



