java - 关于按位补码运算符(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-
为什么结果是负面的?
非常感谢!
解决方案
“现在,由于数字存储为 2 的补码,首先我们需要找到它的 2 的补码……” 不,你补码的次数太多了。你只是用二进制计算 1111 1001 的值,那就是 -7。
一般来说,情况总是如此~x == -x - 1
。您还可以使用它来计算负二进制补码值的值:-x == ~x + 1
,这就是为什么您得到 7:x
是 -7。
推荐阅读
- r - 在 Bluesky Statistics 中,如何将输出写入 csv 文件
- sql - 执行SQL之前的VBA if语句?
- azure-functions - Azure Durable Functions - 诊断故障
- algorithm - 需要说明 ecef 到 enu 算法
- c# - 设置 const 字符串值匹配函数名
- html - 提取所有分隔的Word ...
- docker - Docker for Windows 是否可用于 Windows 10 Enterprise - 10586 Build?
- python - 有没有办法像控制面板(程序和功能)在 python 中那样检索文件的版本和描述名称?
- codeigniter - 如何从codeigniter控制器执行批处理文件
- c++ - 我们应该在项目中包含的所有文件中声明外部变量吗?