关于补码
如何确定它(F0)是负数 的补码。 如果看成带符号数,最高位是符号位,不参与数值计算,如果为1就是负,正的为0 对于补码的理解有疑惑,求指点http://bbs.fishc.com/forum.php?mod=viewthread&tid=4675&fromuid=107918
嗯,鱼老师也是这么说过的,你看他是有符号数那么他就是有符号数,则反之。再次理解应该对了吧 本帖最后由 yk94215 于 2011-10-8 23:21 编辑
正数补码就是他本身,负数的补码是他的绝对值取反+1 。补码表示数字的时候只要是负数,他的最高位都是1.最高位为0都是表示正数。。
如果觉得实在搞不明白你就死记吧。比如一个8位的二进制数,用补码表示的数的范围就是
1000_0000~0111_1111换成10进制就是-128~127 那么 -127是多少呢,其实就是在最小的这个数上面+1.
也就是1000_0001 以此类推。如果换成16位的,那补码可以表示数的范围是多少呢,同理可得是1000_0000_0000_0000~0111_1111_1111_1111 换成10进制数是多少呢,就是-32768~32767
用这个表示方法就好的好处在于,0的补码就是0.也就是不会出现两个表示0的情况。同理如果是32位的数,那么表示的范围就是8000_0000~7FFF_FFFF(16进制表示,因为2进制实在太长了)。
记住一点就行了,补码表示的最高位为1的肯定是表示负数。。 yk94215 发表于 2011-10-8 23:19 static/image/common/back.gif
正数补码就是他本身,负数的补码是他的绝对值取反+1 。补码表示数字的时候只要是负数,他的最高位都是1.最高 ...
负数的补码表示为什么要各位取反之后还要加一?求解
本帖最后由 yk94215 于 2011-10-9 00:23 编辑
asmfans 发表于 2011-10-8 23:52 http://bbs.fishc.com/static/image/common/back.gif
负数的补码表示为什么要各位取反之后还要加一?求解
这个是因为补码设计的时候考虑的。补码设计的时候要求两个绝对值相同的时候,一正一负相加应该是=0的。比如20和-20相加应该是=0.
换成2进制数,那么20=0001_0100 (姑且用8位来表示)
按位取反后得的值是多少1110_1011这个数与前一个数接位相加的值是多少?值是1111_1111 这个数肯定不是0了。要使用他等于0当然再加1就得了1_0000_0000高位自然就溢出了,但是8位的数所以其值就为0了,所以负数的补码应该取反+1这样正负相加才会=0. 所以-20的补码是1110_1011+1=1110_1100;
可能你会问那如果是16位,32位,64位表示这个数字的话怎么办呢,其实只要在正数前面补0,负数前面补1就行了。
比如以上如果用16位表示20就是 0000_0000_1110_1011 -20就是1111_1111_1110_1100;
32位类推就可以得到。
yk94215 发表于 2011-10-9 00:19 static/image/common/back.gif
这个是因为补码设计的时候考虑的。补码设计的时候要求两个绝对值相同的时候,一正一负相加应该是=0的。 ...
好详细,谢谢,学习了!
asmfans 发表于 2011-10-8 23:52 static/image/common/back.gif
负数的补码表示为什么要各位取反之后还要加一?求解
这是规定的,没有什么原因啊 seuer126 发表于 2011-10-9 10:55 static/image/common/back.gif
这是规定的,没有什么原因啊
没错,确实是规定的;但这种规定确实是有原因的,具体看8楼~
8楼真详细!!!!! yk94215 发表于 2011-10-8 23:19 static/image/common/back.gif
正数补码就是他本身,负数的补码是他的绝对值取反+1 。补码表示数字的时候只要是负数,他的最高位都是1.最高 ...
我也是这么想的,哈哈 小甲鱼又说出关于补码的视频,虽然不是完全明白,不过还好有了概念
页:
[1]