2进制数运算的时候符号位需要变化吗?
2进制数运算的时候符号位需要变化吗?
比如机器字长为8位:
一个2进制数***********,表示的是-127,***********+1等于什么呢?是***********还是***********还是别的什么结果?
还有***********的补码又是什么?
参考答案:在计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负.如0111,1111转换为十进制为127,1111,1111为-127,由此我们知一字节的范围为-127--127,其他字节的范围类推.
上面讲的都是原码表示法,可在计算机中的数据都是以补码存放的,只有这样计算时才能减轻cpu的负担(为什么,请参考“计算机基础教程”).提到补码,就不得不提反码了.计算机中是这样规定反码的,如果是正数,则按原码形式不变,如127仍为0111,1111;而如果为负数则,第一位为1,其他各位取反(即0变为1,1变为0),如原码-127(1111,1111),表示为1000,0000.
补码同上,如果是正数,则按原码形式不变,如127仍为0111,1111;如果为负数则除第一位为1外,其他各位取反加1,如-127,先取反为1000,0000,然后加1,为1000,0001.但1000,0000比较特殊,用它来表示-128,由此我们知补码可表示的范围是-128--127.
下面举几个例子:
1)原码
X=45 [X]原=0010 1101
X=-45 [X]原=1010 1101
2)反码
·正数的原码与反码相同( 正数的反码与原码相同,符号位用0表示,数值位值不变 )
X=45 [X]原=0010 1101 [X]反=0010 1101
·负数的反码符号位用1表示, 数值位为原码数值位按位取反形成,即0变1、1变0。
X=-45 [X]原=1010 1101 [X]反=1101 0010
3)补码
·正数的补码与原码相同,即符号位用0表示,数值位值不变。
X=45 [X]原=0010 1101 [X]反=0010 1101 [X]补=0010 1101
·负数的补码为反码加1
X=-45 [X]原=1010 1101 [X]反=1101 0010 [X]补=1101 0011
注
[-127]10=[1111 1111]原=[1000 0000]反=[1000 0001]补
[1000 0001]补+1=[1000 0010]补=[***********]原=[-126]10
可以看出结果是正确的。
有了计算机补码后,运算时可以将符号位一道参与运算