java编程 按位取反的问题

为什么输出结果都要减1.帮忙解释下为什么a定义为正数时,结果为负数.a定义为负数时,结果为正数... 为什么输出结果都要减1.帮忙解释下为什么a定义为正数时,结果为负数.a定义为负数时,结果为正数 展开
 我来答
匿名用户
推荐于2018-04-23
展开全部
  1. 这个问题涉及到计算机内部的编码。 

对于整数,计算机内部用最高位表示符号位,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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式