java - Java 中使用否定的位操作

标签 java bit-manipulation

我正在尝试位操作,有人可以提供可以帮助我解决位操作的基本知识吗? 我面临以下差异。

System.out.println((~1)&1111); gives 1110. Treating ~1 as 0.
System.out.println((~1)); gives -2. 

最佳答案

来自official tutorial通过甲骨文:

The unary bitwise complement operator "~" inverts a bit pattern; it can be applied to any of the integral types, making every "0" a "1" and every "1" a "0"

~1 得到 -2 的原因是 2-complement :

0000 0000 0000 0000 0000 0000 0000 0001

倒置的是

1111 1111 1111 1111 1111 1111 1111 1110

由于 Java 使用 2 补码,因此结果为 -2

<小时/>

将 (~1)&1111 分解为几位:

1111 1111 1111 1111 1111 1111 1111 1110
0000 0000 0000 0000 0000 0100 0101 0111
___________________________________________
0000 0000 0000 0000 0000 0100 0101 0110

0100 0101 0110 以 10 为基数表示为 1110

关于java - Java 中使用否定的位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465750/

相关文章:

java - 在多个服务器上执行 ScheduledExecutorService

c# - 使用 WebSocket 在 Java 和 C# 桌面应用程序之间进行通信?

java - 创建相关 java.io.File 的安全方法

c - 将十进制值编码为固定位数

java - 如何在事先不知道最后一个 1 的情况下用 '1' 填充 Java 字节中的高端位? (FAST FIX 负整数解码器)

java - javafx 上的 sun.security.pkcs11

java - 将非常大的整数转换为位 vector 失败

java - 位运算符 - 精度

c - 什么是异或和?

c - 使用 n 位数字生成数字(类似于生成 n 位值的子集)