~operator在Java中是如何工作的?

~operator在Java中是如何工作的?,java,bit-manipulation,operation,Java,Bit Manipulation,Operation,我在Java中寻找一些位操作,找到了~运算符。 我发现了以下解释: ~a是a的结果,通过反转a的所有位 所以,当我创建一个System.out.println(~1)时,为什么输出是-2? 当0001=1时,反转后它应该是1110,记住负数存储在2的补码表示中。这意味着你先取数字的补码,然后加1 int val = 20; val = (~val)+1; // 20 == 0b00000000000000000000000000010100 // ~20 == 0b11

我在Java中寻找一些位操作,找到了~运算符。 我发现了以下解释:

~a是a的结果,通过反转a的所有位

所以,当我创建一个
System.out.println(~1)
时,为什么输出是-2?
当0001=1时,反转后它应该是1110,记住负数存储在2的补码表示中。这意味着你先取数字的补码,然后加1

int val = 20;
val = (~val)+1;
//  20     ==   0b00000000000000000000000000010100
// ~20     ==   0b11111111111111111111111111101011
// (~20)+1 ==   0b11111111111111111111111111101100 
System.out.println(val);
印刷品

-20

无论值是整数还是浮点,高阶位都是符号位<代码>1表示否定,
0
表示不否定。

但11。。。1110是-2。你可能想看看负数是如何工作的你是对的,因为负数可以用1来填充,我完全忘记了这一点!