Java语言负值表示法
示例
Java和大多数其他语言在表示2的补码表示法中存储负整数。
对于使用n位的数据类型的唯一二进制表示形式,值的编码如下:
最低有效n-1位x以整数表示形式存储正整数。最高有效值存储一点值s。这些位代表的值是
x-s*2n-1
即,如果最高有效位为1,则减去一个比您可以用其他位()表示的数字大1的值,从而允许从-2n-1(s=1;x=0)到2n-1-1(s=0;x=2n-1-1)。2n-2+2n-3+...+21+20=2n-1-1
这也有很好的副作用,您可以将二进制表示形式添加为正二进制数:
v1 = x1 - s1 * 2n-1v2 = x2 - s2 * 2n-1
x1 + x2 - 2 = x1 + x2 - s2 * 2
= v1 + v2(x1 + x2) 2 = x1 + x2 - 2
= v1 + v2(x1 + x2) 2 - 2 = (x1 + x2 - 2) - 2
= (x1 - s1 * 2) + (x2 - s2 * 2)
= v1 + v2请注意,这一事实使查找加法逆(即负值)的二进制表示变得容易:
观察到将按位补码加到数字上会导致所有位均为1。现在加1会使值溢出,并且得出中性元素0(所有位0)。
因此,i可以使用来计算数字的负值(忽略int此处的可能提升)
(~i) + 1
示例:取负值0(byte):
否定的结果0是11111111。加1得出的值为100000000(9位)。由于abyte只能存储8位,因此最左边的值将被截断,结果是00000000
热门推荐
10 八一幼儿祝福语大全简短
11 公司乔迁食堂祝福语简短
12 婚礼结束聚餐祝福语简短
13 儿媳买车妈妈祝福语简短
14 毕业送礼老师祝福语简短
15 同事辞职正常祝福语简短
16 恭贺新婚文案祝福语简短
17 金店立秋祝福语简短英文
18 婆婆高寿祝福语大全简短