10进制数-127的补码
在计算机中是这样规定的,用一个数的最高一位表示正负,0为正,1为负。如0111,1111转换为十进制为127,1111,1111为-127,由此我们知一字节的范围为-127--127,其他字节的范围类推。 上面讲的都是原码表示法,可在计算机中的数据都是以补码存放的,只有这样计算时才能减轻cpu的负担(为什么,请参考“计算机基础教程”)。提到补码,就不得不提反码了。计算机中是这样规定反码的,是正数,则按原码形式不变,如127仍为0111,1111;而为负数则,第一位为1,其他各位取反(即0变为1,1变为0),如原码-127(1111,1111),表示为1000,0000。 ...全部
在计算机中是这样规定的,用一个数的最高一位表示正负,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 11012)反码·正数的原码与反码相同( 正数的反码与原码相同,符号位用0表示,数值位值不变 )X=45 [X]原=0010 1101 [X]反=0010 1101·负数的反码符号位用1表示, 数值位为原码数值位按位取反形成,即0变1、1变0。
X=-45 [X]原=1010 1101 [X]反=1101 00103)补码·正数的补码与原码相同,即符号位用0表示,数值位值不变。X=45 [X]原=0010 1101 [X]反=0010 1101 [X]补=0010 1101 ·负数的补码为反码加1X=-45 [X]原=1010 1101 [X]反=1101 0010 [X]补=1101 0011注[-127]10=[1111 1111]原=[1000 0000]反=[1000 0001]补[1000 0001]补 1=[1000 0010]补=[11111110]原=[-126]10可以看出结果是正确的。
有了计算机补码后,运算时可以将符号位一道参与运算当然,步痕旅游网想法:补充:原码、反码中0都有两个,而补码中却只有一个,原因就是它把其中一个转为最小的-128(10000000),而原码中的10000000表示的是00000000,不能按常规来解释原码的10000000的补码,如果按常规来讲,就是10000000(-0变成了-128)。
来看下关于1000000的运算(默认为补码)10000000 00000001 = 10000001 = 11111111(原)(-128 1 = -127)01111111 00000001 = 10000000(127 1 = -128)(溢出)(这里没有转成原码,因为转后就是-0)楼主说11111111表示-127,看来用的是原码。
那么原码中相反符号数之间的加法做的是减法,所以结果是11111110(-126),计算机内是以补码形式存在的,所以11111111表示-1,加1的结果就是00000000。而对于10000000,楼主的意思好像是原码,也就是原码中的0,它的补码也同样是0。
求补得到的结果也是一样的。 。收起