为什么计算机采用最高位1为负数,0为正数这种规则?有什么深层次的原因吗?

略懂略懂00 2014-03-03 04:03:57
看到8位char类型的数据范围为-128~127,其推导设定采用最高位1为负数,0为正数这种规则,是人为规定的还是什么原因?
...全文
1061 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 9 楼 u013106556 的回复:
[quote=引用 6 楼 czarten 的回复:] 人眼看来最直观的方案是原码 但原码有两个0,正0和负0,因此“看起来直观”的代价是计算混乱 另外一个方案是移码,移码的问题在于,由于每个数都自带一个偏移量,当两数相加或相减时,偏移量就会出问题,同样计算麻烦 再就是补码了,补码你一开始会觉得很难理解,不明白为什么规定成这样,其实理解了之后也是很直观的:就是一个正数不断增大,增大到破表就变成了负数,相当于最大的数+1等于最小的数,也就是把整个值域连成了一个环,你玩过贪吃蛇吗,蛇从左边出界会从右边进来 补码的逆天之处在于,它的加减法可以无视两数符号,正数+正数,负数+负数,正数+负数,负数+正数,都是一样的算法,而其它方案就要根据两数符号采取不同的步骤,因此“人眼不直观”带来的好处是“机器容易算” 但是,补码乘除法就没那么方便了,不过其它码的乘除法也没方便到哪去,因此补码是最佳选择
受教了,许多细节需要自己仔细琢磨。。。[/quote] 补码就是只需要完成加法的电路,就能实现加减法。
xiaohuh421 2014-03-04
  • 打赏
  • 举报
回复
计算机组成原理, 再去复习复习.
sanredfish 2014-03-03
  • 打赏
  • 举报
回复
最高位1为负数,0为正数这种规则的最简单解释是:系统扩充位数的时候比较便利,只需要用最高位填充就可以保持不变。 如果你要问为什么是补码,请参照上面的答案。
略懂略懂00 2014-03-03
  • 打赏
  • 举报
回复
引用 6 楼 czarten 的回复:
人眼看来最直观的方案是原码 但原码有两个0,正0和负0,因此“看起来直观”的代价是计算混乱 另外一个方案是移码,移码的问题在于,由于每个数都自带一个偏移量,当两数相加或相减时,偏移量就会出问题,同样计算麻烦 再就是补码了,补码你一开始会觉得很难理解,不明白为什么规定成这样,其实理解了之后也是很直观的:就是一个正数不断增大,增大到破表就变成了负数,相当于最大的数+1等于最小的数,也就是把整个值域连成了一个环,你玩过贪吃蛇吗,蛇从左边出界会从右边进来 补码的逆天之处在于,它的加减法可以无视两数符号,正数+正数,负数+负数,正数+负数,负数+正数,都是一样的算法,而其它方案就要根据两数符号采取不同的步骤,因此“人眼不直观”带来的好处是“机器容易算” 但是,补码乘除法就没那么方便了,不过其它码的乘除法也没方便到哪去,因此补码是最佳选择
受教了,许多细节需要自己仔细琢磨。。。
略懂略懂00 2014-03-03
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
王八的屁股——龟腚!(规定)
可能确实这样。。
略懂略懂00 2014-03-03
  • 打赏
  • 举报
回复
引用 1 楼 modyaj 的回复:
你有什么更好的办法来标识正负数吗?
没有,呵呵。可能自己没理解到采用这种方法的便利之处吧。
你怎么了熊吉 2014-03-03
  • 打赏
  • 举报
回复
人眼看来最直观的方案是原码 但原码有两个0,正0和负0,因此“看起来直观”的代价是计算混乱 另外一个方案是移码,移码的问题在于,由于每个数都自带一个偏移量,当两数相加或相减时,偏移量就会出问题,同样计算麻烦 再就是补码了,补码你一开始会觉得很难理解,不明白为什么规定成这样,其实理解了之后也是很直观的:就是一个正数不断增大,增大到破表就变成了负数,相当于最大的数+1等于最小的数,也就是把整个值域连成了一个环,你玩过贪吃蛇吗,蛇从左边出界会从右边进来 补码的逆天之处在于,它的加减法可以无视两数符号,正数+正数,负数+负数,正数+负数,负数+正数,都是一样的算法,而其它方案就要根据两数符号采取不同的步骤,因此“人眼不直观”带来的好处是“机器容易算” 但是,补码乘除法就没那么方便了,不过其它码的乘除法也没方便到哪去,因此补码是最佳选择
赵4老师 2014-03-03
  • 打赏
  • 举报
回复
王八的屁股——龟腚!(规定)
熊熊大叔 2014-03-03
  • 打赏
  • 举报
回复
baidu一下"补码"
derekrose 2014-03-03
  • 打赏
  • 举报
回复
有助于有符号和无符号的转换?
图灵狗 2014-03-03
  • 打赏
  • 举报
回复
兼顾效率和封闭性的人为约定,除非你有更合适的方法。
引用 楼主 u013106556 的回复:
看到8位char类型的数据范围为-128~127,其推导设定采用最高位1为负数,0为正数这种规则,是人为规定的还是什么原因?
modyaj 2014-03-03
  • 打赏
  • 举报
回复
你有什么更好的办法来标识正负数吗?

70,014

社区成员

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

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