我正在尝试制作一个程序,在输入二进制数后计算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。
任何帮助?
答案 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它将使其为负(通过打开高位)。
如果您要以十六进制打印数字(或二进制,如其他答案所示),您应该看到您期望的答案。