找到1的补码

时间:2013-10-26 17:17:00

标签: 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);
  }
}

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

任何帮助?

2 个答案:

答案 0 :(得分:10)

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

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();
Please enter your number: 0111011
1111111111111111111111111111111111111111111111111111111111000100

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

答案 1 :(得分:2)

~运算符按照您的想法执行,但请记住Java中没有无符号类型,因此当您输入正数(即高位为0)时,应用{{1它将使其为负(通过打开高位)。

如果您要以十六进制打印数字(或二进制,如其他答案所示),您应该看到您期望的答案。