(leetcode basic)补码的取值范围的理解

对于补码取值范围的理解

对不补码的取值范围其实一直都有疑惑,单独算补码很好算,但是一旦涉及到边界,涉及到0,-128这样的补码,就会有纠结,本文通过吸取别人的经验用一个简单的理解把补码的范围记录一下。

128的补码为什么是1000 0000

8位二进制的原值表达范围为:-127至127
共有256个组合序列 0000 0000 至1111 1111 。
+128的原值在8位中是表达不出来的。

8位二进制 的补码组合序列有256个
0000 0000 - 0111 1111 0 ~+127
1000 0000 用来干啥好呢?
1000 0001 - 1111 1111 -1~-127

再看看这个规律表
原码 补码 值
0111 1111 0111 1111 +127
0111 1110 0111 1110 +126
… … 补码不断-1…
0000 0000 0000 0000 0
1000 0001 1111 1111 -1
1000 0010 1111 1110 -2
1000 0011 1111 1101 -3
… … 补码不断-1…
1111 1111 1000 0001 -127
无法表达 1000 0000 -128

于是就有了规定 1000 0000 定为 -128的补码
同样,对于64位补码的范围[-263,263-1]也有非常好的理解

你可能感兴趣的:(算法)