关于位补码运算符(Java)的问题



当我在学习位补运算符时,我在网上看到了一些例子:

(短)示例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。

相关内容

  • 没有找到相关文章

最新更新