【发布时间】:2013-07-03 23:51:47
【问题描述】:
我使用~ 操作进行位操作,我只是想知道Java 是如何计算负数的?
我查看了 Java 文档:
“一元按位补码运算符“~”反转位模式;它可以应用于任何整数类型,使每个“0”成为“1”,每个“1”成为“0”。例如,一个字节包含 8 位;将此运算符应用于位模式为“00000000”的值会将其模式更改为“11111111”。”
所以如果int a = 60 (0011 1100),那么int c = ~a (1100 0011)。
问题是,Java 如何计算负数使得1100 0011 = -61? 1100 0011 计算 -61 的唯一方法是
- 最高位是符号位。
-
-2^6 + 2^1 + 2^0 = -61。
但这对我来说毫无意义。
【问题讨论】:
-
您在正确的轨道上,最高位是符号位。请参阅Two's complement。
-
有符号位用于双精度和浮点数,这意味着您有 0.0 和 -0.0,整数不是这样完成的,
char是无符号的。