其简单的数据类型变量具有2^(sizeof(datatype) * CHAR_BIT) 值。现在取决于这个数据类型是signed 还是unsigned。
signed 具有 0 .. ((2^(sizeof(datatype) * CHAR_BIT))-1) 值。
unsigned 具有 -((2^(sizeof(datatype) * CHAR_BIT))/2) .. +((2^(sizeof(datatype) * CHAR_BIT)/2)-1) 值。
char 数据类型
2^8 是256
在哪里
-128..127 具有 256 值
对于signed char 和unsigned char 有范围
0..255,仍然是 256 值。
字节是 8 位序列。
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+---+
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
最高位(小字节序)表示值是0 - positive还是1 - negative,其余位为值。
那么你有
+---+---+---+---+---+---+---+---+
| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | < Max positive number
+---+---+---+---+---+---+---+---+
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
和
+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | < Max negative number
+---+---+---+---+---+---+---+---+
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
零是因为数字通常用two's complement 表示。
以下是二进制补码的转换
1. Invert all bits -> |0|1|1|1|1|1|1|1| -> 127
2. Add 1 -> |1|0|0|0|0|0|0|0| -> 128
3. Change sign -> -> -128