首页 > 解决方案 > 关于按位补码运算符(Java)的问题

问题描述

当我学习按位补码运算符时,我在互联网上看到了一些示例:

(简而言之)示例1:

整数a = 15;诠释 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:

Bitwise Not 或 Complement 运算符仅表示输入值的每一位的否定。它只需要一个整数,它相当于!操作员。

此运算符更改整数的每个二进制位,这意味着所有 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 的补码,然后将生成的二进制数转换为十进制数:

1111 1001 -> 0000 0110 + 1 -> 0000 0111 最后,0000 0111 是十进制的 7。由于如上所述符号位为 1,因此得到的答案是:

结果:-7

来自:https ://www.baeldung.com/java-bitwise-operators#4-bitwisecomplement-

为什么结果是负面的?

非常感谢!

标签: javabit-manipulationoperator-keyword

解决方案


“现在,由于数字存储为 2 的补码,首先我们需要找到它的 2 的补码……” 不,你补码的次数太多了。你只是用二进制计算 1111 1001 的值,那就是 -7。

一般来说,情况总是如此~x == -x - 1。您还可以使用它来计算负二进制补码值的值:-x == ~x + 1,这就是为什么您得到 7:x是 -7。


推荐阅读