首页 > 代码库 > 不要在纠结负数的表示了
不要在纠结负数的表示了
计算机数背景
为了解决原码做减法的问题, 出现了反码,但是又出现了 ‘-0’的问题。
eg:1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原= -0
因为补码的出现解决了-0的问题,而且多出来的1000 0000可以用来表示 -128。 很nice。
真值:-128
机器码(补码):1000 0000(1Byte)
我们都知道负数在计算机中都是用补码存储的!如果计算真值(当然符号位是1也就是负数的真值)一般流程都是:符号位不管,然后其他位按位取反(求反码) + 1(得真值)。
那么机器码计算出来的也是 -128(补) = 1000 0000 = 1111 1111(反) + 1 = 0000 0000(原) = 0(真值)! 错!因为-128是用的-0的补码(1000 0000)来固定表示的,所以不能用这个方法来计算其补码和原码(-128就没有补码和源码,这句话是他说的!)
注意判断符号位 前面都是1。
不要在纠结负数的表示了
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。