6

2進数を入力してから1の補数を計算するプログラムを作ろうとしています。これは私がこれまでに持っているものです:

import java.util.Scanner;
public class BitWiseComplement {
    public static void main(String[] args) {
        Scanner keysIn = new Scanner(System.in);
        System.out.println("Please enter your number: ");
        long originalNum = keysIn.nextLong();
        System.out.println(~originalNum);
  }
}

ただし、0111011 を入力すると、-111012 が返されます。~ 演算子は、すべての 0 が 1 になり、すべての 1 が 0 になるように数値を反転することになっていると思いました。

何か助けはありますか?

4

3 に答える 3

12

おそらくバイナリで作業したいので、試してください:

Scanner keysIn = new Scanner(System.in);
System.out.print("Please enter your number: ");

long originalNum = keysIn.nextLong(2);  // specify radix of 2
System.out.println(Long.toBinaryString(~originalNum));  // print binary string

keysIn.close();
あなたの番号を入力してください: 0111011
111111111111111111111111111111111111111111111111111111000100

ご覧のとおり、すべてのビットが反転しています。入力した 2 進数の前に 0 があることに注意してください。

于 2013-10-26T17:21:04.120 に答える
1

~演算子はあなたが考えていることを実行しますが、Java には符号なしの型がないことに注意してください。そのため、正の数を入力すると (つまり、上位ビットが 0)、それに適用する~と負になります (上位ビットを回すことによって)。ビットオン)。

数値を 16 進数 (または他の回答が示唆するように 2 進数) で出力する場合は、期待どおりの回答が表示されるはずです。

于 2013-10-26T17:20:04.120 に答える