找到1的补码

use*_*004 5 java ones-complement

我想在输入二进制数后制作一个程序来计算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);
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我输入0111011时,我得到-111012.我认为〜运算符应该反转数字,以便所有0都是1,所有1都是0.

有帮助吗?

ars*_*jii 11

你可能想用二进制工作,所以试试:

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();
Run Code Online (Sandbox Code Playgroud)
Please enter your number: 0111011
1111111111111111111111111111111111111111111111111111111111000100

如您所见,所有位都被翻转.请记住,您输入的二进制数前面有前导0.

  • 0111011 的补数是 1000100 但为什么答案中有这么多 1 以及如何摆脱它们? (2认同)