[quote=引用 6 楼 czarten 的回复:] 人眼看来最直观的方案是原码 但原码有两个0,正0和负0,因此“看起来直观”的代价是计算混乱 另外一个方案是移码,移码的问题在于,由于每个数都自带一个偏移量,当两数相加或相减时,偏移量就会出问题,同样计算麻烦 再就是补码了,补码你一开始会觉得很难理解,不明白为什么规定成这样,其实理解了之后也是很直观的:就是一个正数不断增大,增大到破表就变成了负数,相当于最大的数+1等于最小的数,也就是把整个值域连成了一个环,你玩过贪吃蛇吗,蛇从左边出界会从右边进来 补码的逆天之处在于,它的加减法可以无视两数符号,正数+正数,负数+负数,正数+负数,负数+正数,都是一样的算法,而其它方案就要根据两数符号采取不同的步骤,因此“人眼不直观”带来的好处是“机器容易算” 但是,补码乘除法就没那么方便了,不过其它码的乘除法也没方便到哪去,因此补码是最佳选择
人眼看来最直观的方案是原码 但原码有两个0,正0和负0,因此“看起来直观”的代价是计算混乱 另外一个方案是移码,移码的问题在于,由于每个数都自带一个偏移量,当两数相加或相减时,偏移量就会出问题,同样计算麻烦 再就是补码了,补码你一开始会觉得很难理解,不明白为什么规定成这样,其实理解了之后也是很直观的:就是一个正数不断增大,增大到破表就变成了负数,相当于最大的数+1等于最小的数,也就是把整个值域连成了一个环,你玩过贪吃蛇吗,蛇从左边出界会从右边进来 补码的逆天之处在于,它的加减法可以无视两数符号,正数+正数,负数+负数,正数+负数,负数+正数,都是一样的算法,而其它方案就要根据两数符号采取不同的步骤,因此“人眼不直观”带来的好处是“机器容易算” 但是,补码乘除法就没那么方便了,不过其它码的乘除法也没方便到哪去,因此补码是最佳选择
王八的屁股——龟腚!(规定)
你有什么更好的办法来标识正负数吗?
看到8位char类型的数据范围为-128~127,其推导设定采用最高位1为负数,0为正数这种规则,是人为规定的还是什么原因?
70,014
社区成员
243,263
社区内容
加载中
试试用AI创作助手写篇文章吧