当我在学习位补运算符时,我在网上看到了一些例子:
(短)示例1:
int a= 15;Int b = 27;
//15 = 0000 1111//27 = 0001 1011
~ a的结果是-16//-16= 0001 0000
从:https://www.youtube.com/watch?v=qfH2Fkc1ujg
如果~是将0转换为1,1转换为0,为什么把0001 0000,结果是-16?
示例2:
按位不补或补操作符表示输入值的每一位的负值。它只需要一个整数,它相当于!运营商。
该运算符改变整型的每一位二进制数字,即所有0变为1,所有1变为0。!运算符对布尔值的作用类似:它将布尔值从真反转为假,反之亦然。
现在让我们用一个例子来理解如何查找十进制数的补数。
让我们做value1 = 6的补集:
@Test
public void givenOneInteger_whenNotOperator_thenNewDecimalNumber() {
int value1 = 6;
int result = ~value1;
assertEquals(-7, result);
}
二进制的值是:
value1 = 0000 0110通过应用补运算符,结果将是:0000 0110 ->1111 1001这是十进制数6的一补数。由于二进制中第一个(最左边的)位是1,这意味着存储的数字的符号是负的。
现在,由于数字存储为2的补码,首先我们需要找到它的2的补码,然后将得到的二进制数转换为十进制数:
11111001 ->0000 0110 + 1 ->0000 0111最后,0000 0111的十进制数是7。由于如上所述符号位为1,因此结果答案为:
result: -7
: https://www.baeldung.com/java-bitwise-operators 4-bitwisecomplement——
为什么结果是阴性的?
非常感谢!
"现在,由于数字存储为2的补码,首先我们需要找到它的2的补码…"不。你赞美的次数太多了。只是计算11111001的二进制值,结果是-7。
一般情况下,~x == -x - 1
。你也可以用它来计算- 2的补值:-x == ~x + 1
,这就是为什么你得到7:x
是-7。