经常看到很多初学者被有符号类型无符号类型,还有什么首位是符号位blablabla弄的云里雾里,下面用特别简单的例子给大家讲一下,瞬间就懂。
首先3位2进制数能代表多少,很简单
000~111 0~7 一共8个数
这是最简单的读法,但是咱们又想用同样的东西表示正负可咋整;
简单 对半劈
8分开一办吧 一半正一半负 大家公平OK?
- 0~3 4个数还是原来那样表示正数
- 4~7 4个数表示负数
怎么对应呢 大家发现没
1+7=8 2+6=8 3+5=8哎 刚好是2的三次方那就分别用7,6,5表示对应的-1,-2,-3吧;
怎么实现呢 1(001)的反码是6(110)相加才等于7 那么再加个1就得到补码7(111) 刚好相加是8 其他的类似 有意思的是中间数4(100)对应的补码还是自己100 所以也可以叫4,也可以叫-4,咱不说要公平吗 让他代表-4最合理,所以
使用补码就得到了
- 1-7(-1)
- 2-6(-2)
- 3-5(-3)
- 4-4(-4)
的一一对应,所以同样的000~111这次我们可以用这种办法表示负数了
发现没有0,1~3有对应的-1~-3那么尴尬的中间数4就表示-4吧而-1~-4都是1开始的 所以可以看成最高位是1就是负数(符号位)这可不是为了变成负数而设置的符号位 而是这种规则导致表示负数时最高位就是符号位。是不是很明白呢 觉得明白就赞一下吧。
- 对应的n位 一共2^n个数;
- 0~2^(n-1)-1表示正数
- 2^(n-1)~2^n-1表示负数