计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同 。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理
- 正整数的补码是其二进制表示,与原码相同
- 负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
- 已知一个数的补码,求原码的操作其实就是对该补码再求补码
| int8 | 原码 | 补码 | 补码再补码 |
|---|---|---|---|
| 1 | 0000 0001 | 0000 0001 | 0000 0001 |
| 2 | 0000 0010 | 0000 0010 | 0000 0010 |
| -1 | 1000 0001 | 1111 1111 | 1000 0001 |
| -2 | 1000 0010 | 1111 1110 | 1000 0010 |
如果 -1 的补码 1111 1111 被当做 uint8 类型读取时, 求得原码 1111 1111 = 2^8 -1
|
|