java编程 按位取反的问题
为什么输出结果都要减1.帮忙解释下为什么a定义为正数时,结果为负数.a定义为负数时,结果为正数...
为什么输出结果都要减1.帮忙解释下为什么a定义为正数时,结果为负数.a定义为负数时,结果为正数
展开
1个回答
推荐于2018-04-23
展开全部
这个问题涉及到计算机内部的编码。
对于整数,计算机内部用最高位表示符号位,0表示为正,1表示为负。
对于负数,为了便于计算,计算机用补码来表示其值。
已经一个数的补码,要知道其值分两种情况:
1:符号位是0,正数,所以后面的二进制位则表示大小,即正数的原码=其补码。如1表示出来则为00000001(我这里用八位来表示,也可以用16位或32位)
2:符号位是1,负数,这时候需要把后面的数取反再加一(要问为什么?查一下资料吧,可以根据补码的特性推出来),所以11111110表示的数是1111110取反为0000001,再加1,则为0000002。算上符号位,就是-2。
以你的例子来说,
a=0=0000 0000 0000 0000 0000 0000 0000 0000
~a = 1111 1111 1111 1111 1111 1111 1111 1111
符号位是1,后面的数取反再+1
1000 0000 0000 0000 0000 0000 0000 0001 = -1
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询