日期:2014-05-20  浏览次数:20767 次

问一个计算机原理方面的问题

1)机器数,比如11111111,如果是无符号的,应该是255,如果是有符号的,应该是-127
我想问下,电脑是怎么判断,这个数字什么时候是有表示带符号的呢?


机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的
采用8位二进制表示时,整数补码的表示范围:
最大为01111111,其真值为(127)10

最小为10000000,其真值为(一128)10



补码最小数表示-128 是怎么计算的呀?
按照 10000000 先求反 11111111,然后加1,貌似8位码表示不了了呀,请赐教

------解决方案--------------------
有符无符的区分,应该是编译器内部作的解析处理,在内存上,有符无符是一样的二进制数,电脑是不知道该内存是有符还是无符的,只知道是一串二进制数,而在程序上,编译器可以根据其规定的类型,把内存信息的二进制表现为程序需要的结果。
有符类型的最大数是
01111111 即 127
至于-128
首先无符的正数128是
10000000
然后依照负数=正数的补码=正数的反码+1进行转换
首先符号位为1,然后各位取反得到11111111,然后+1,得到10000000(超出范围的被舍弃)
同理,-127为
01111111,首先符号位是1,各位取反得到10000000,然后+1,得到10000001
...
一直到-1为
00000001,首先符号位是1,各位取反得到11111110,然后+1,得到11111111

所以,综上可知,负数补码,可以把符号位也一起运算,如
-128,首先,正数128
10000000,各位取反,得到01111111,然后+1,得到11111111 (符号位也参与运算)
-127,首先,正数127
01111111,各位取反,得到10000000,然后+1,得到10000001
...
-1,首先,正数1
00000001,各位取反,得到11111110,然后+1,得到11111111




------解决方案--------------------
探讨
引用:

-128 --------- 10000000

-127 --------- 10000001
.............
-1 --------- 11111111
0 --------- 00000000


不明白是怎么表示-128的,请赐教? 我怎么觉得是-0呢?也就是0

------解决方案--------------------
探讨

引用:

引用:

-128 --------- 10000000

-127 --------- 10000001
.............
-1 --------- 11111111
0 --------- 00000000


不明白是怎么表示-128的,请赐教? 我怎么觉得是-0呢?也……

------解决方案--------------------
探讨

引用:
引用:

-128 --------- 10000000

-127 --------- 10000001
.............
-1 --------- 11111111
0 --------- 00000000


不明白是怎么表示-128的,请赐教? 我怎么觉得是-0呢?也就是……