为了账号安全,请及时绑定邮箱和手机立即绑定

5-1我想知道8143>>0*8 & 0xff =(11001111) =207

改为有符号,值就成了-49?是怎么计算的

正在回答

4 回答

8143 二进制表示为 1111111001111,

8143>>0*8中0*8的优先级更高,所以这就是对8143右移0位,之后的与运算,结果就是11001111,如果11001111作为无符号数就是207,如果作为有符号数,11001111第一个1,就是表示为负号,根据负数的表示方式 负数为绝对值的补码,11001111转换为原码,先加1,得到11010000,然后取反00101111=49,所以就是-49


1 回复 有任何疑惑可以回复我~

综上,好像就是要么先求反后加1,要么先减一再求反。

第一种就是利用补码的补码就是原码的原理。

第二种就是就利用求负数补码的逆运算。

0 回复 有任何疑惑可以回复我~

数值是以补码表示的。正数的补码与该数的原码(该数的二进制形式)相同,求负数的补码:是将该数的绝对值形式,然后按位取反再加1,得到该负数的补码,转十进制数,再取该十进制数的相反数,可以得到要求的。

8143 二进制表示为 1111111001111  第一个1表示负号

|  1111111001111  | = 1111111001111    //第一步,取该数的绝对值

~ 1111111001111   =  0000000110000    //第二步,按位取反得  0000000110000    

0000000110000   + 1 = 0000000110001   //第三步,取反后加1得0000000110001

0000000110001  有符号数的十进制为49

第四步,取该十进制数的相反数 得  -49

2 回复 有任何疑惑可以回复我~

很明显,大兄弟,你计算错了,你的结果是-47,但是还是很感谢你的提点,正确计算是这样的:

首先它是一个负数,那么负数是以补码形式存在的,而要得到一个负数的原码,应该先减1,然后取反

也就是 11001111-1 = 11001110啊,然后取反 得到00110001 ,然后取00110001的相反数得到-49

2 回复 有任何疑惑可以回复我~
#1

lululululuming3310524

对的,搞错了,应该先减一
2016-08-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
二进制基础
  • 参与学习       99871    人
  • 解答问题       210    个

二进制是计算机唯一能识别的语言,是学习计算机技术必备的知识

进入课程

5-1我想知道8143>>0*8 & 0xff =(11001111) =207

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信