-128的补码是怎么算去来的???

csdnlady 2005-08-28 10:42:02
按求补码的要求:负数的补码等于原码最高位为1,其余各位为该数的绝对值,反码为最高位为1,其余各位求反,补码为反码加1
所以
原码 反码 补码
-127= 11111111 10000000 10000001



原码 反码 补码
-128=



-128的原码是10000000,还是110000000?
是不是按这个公式不能求啊,只是规定它的补码(00000000),也就是说这个0不是算出来的,只是规定这样而已???
知道的能回答一下吗?谢谢
...全文
6408 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaocai0001 2005-08-28
  • 打赏
  • 举报
回复 2
在机器中
负数的补码是这样算的:
先将该负数取绝对值,再用二进制表示出这个绝对值
对该二进制数进行取反加一操作就得到负数的补码了
-128 绝对值是 128
128的二进制表示为:
1000 0000
取反
0111 1111
加1
1000 0000
这就是-128的补码
showtime84 2005-08-28
  • 打赏
  • 举报
回复
你试试用其它的也用公试算算看,不要用反码!

你就明白了!
showtime84 2005-08-28
  • 打赏
  • 举报
回复
补码定义:

[x]补={ x 0<=x<2~n-1
2~n-|x| -2~n-1<=x<0

根据这个定义, 2的8次方 256一128=128 在计算机中-128的补码就是10000000
xiaocai0001 2005-08-28
  • 打赏
  • 举报
回复
你用9位以上的二进制来算-128就能算出来了
比如用16位二进制表示
-128
原码: 1 000 0000 1000 0000
反码: 1 111 1111 0111 1111
补码: 1 111 1111 1000 0000
用9位二进制表示
-128
原码 1 1000 0000
反码 1 0111 1111
补码 1 1000 0000
用8位二进制原码表示-128,实现是"巧妇难为无米之炊"!
csdnlady 2005-08-28
  • 打赏
  • 举报
回复
就象你所说的,-128的原码用8位表示不出来(肯定是表示不出来了,因为多了一个负0),那它的补码该怎么样算出来呢,给个过程,呵呵
showtime84 2005-08-28
  • 打赏
  • 举报
回复
当x=2~n-1时,必须通过补码定义才能求得补码,因为在该点,x的原码,反码都无定义.

x反所能表示的整数范围为-(2~n-1-1),(2~n-1-1)
csdnlady 2005-08-28
  • 打赏
  • 举报
回复
这些我知道,只是根据上面的规定我算不出来-128是怎么得来的,也看不懂书上是怎么算出来的结果,呵呵,你能给我一种计算的方法吗?
xiaocai0001 2005-08-28
  • 打赏
  • 举报
回复
是啊
所以你想用原码表示出 -128
那就要用9位二进制
即 1 1000 0000
而限定在8位二进制中,是无法用原码表示出 -128

各种8位二进制的表示法的数据范围如下:
原码: -127 ~ 127
反码: -127 ~ 127
补码: -128 ~ 127
移码: (忘了)

原码和反码之所以比补码少表示一位数,是因为在原码和反码中,0有两种表示方法
showtime84 2005-08-28
  • 打赏
  • 举报
回复
-128的原码只能在16位里面请示,因为8位根本放不下!

16位的应当是1000000010000000
csdnlady 2005-08-28
  • 打赏
  • 举报
回复
问题是大部分的书上都不是这样描述的,我不知道他们的-128是怎么求出来的,都是一下子给出最后的答案,我对这个问题迷惑很久的,能给个详细的解答吗?谢谢,不好意思浪费你的时间了
showtime84 2005-08-28
  • 打赏
  • 举报
回复
楼上正解:原码的8位表示范围只能是-127~~+127

负数是以补码存放在内存中的,没有必要讨论它的原码!
csdnlady 2005-08-28
  • 打赏
  • 举报
回复
请是按以下这个规定给我求出来可以吗?
补码是这样规定的:
负数:最高位为1,其余各位为原码的相应位取反,然后对整个数加1
如:-7的原码 10000111
-7的反码 11111000
-7的补码 11111001

这样你来求一下-128吧,谢谢
-128的原码 ???
xiaocai0001 2005-08-28
  • 打赏
  • 举报
回复
你表述的那种原码,反码表示法都是另设有符号位的.
如果有符号位的话,
8位二进制的原码只能表示出-127 ~ + 127
是表示不出-128的
xiaocai0001 2005-08-28
  • 打赏
  • 举报
回复
-128用二进制表示就是
128的原码:
1000 0000 --原码
-128的补码表示:
0111 1111 --反码
1000 0000 --补码
用一个字节是表示有符号整数的范围是-128 ~ 127
所以1000 0000 表示的是 -128的补码,而不是+128的原码
csdnlady 2005-08-28
  • 打赏
  • 举报
回复
不好意思我的描述有点问题:再补充
负数的原码等于最高位为1,其余各位为该数的绝对值,反码为最高位为1,其余各位求反,补码为反码加1,这样应该是对的吧
xiaocai0001 2005-08-28
  • 打赏
  • 举报
回复
按求补码的要求:负数的补码等于原码最高位为1,其余各位为该数的绝对值,
------------------------
没看过这样的
我只记得有:正数的补码=原码 负数的补码=原码取反加1
难道"原码取反加1"等价于"原码最高位为1,其余各位为该数的绝对值"
我试试看

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧