原码→(按位取反)→反码→(+1)→补码
整数有3种表示形式,在内存中以补码的形式存在。
正数 与 负数 区别:
正数的二进制格式首位为0,正数的原反补码是相同的!
例如:
1:
00000000 00000000 00000000 00000001(原码)
00000000 00000000 00000000 00000001(反码)
00000000 00000000 00000000 00000001(补码),
负数的二进制格式首位为1。
例如:
-1:
10000000 00000000 00000000 00000001(原码)
11111111 11111111 11111111 111111110(反码)
11111111 11111111 11111111 11111111(补码)
练习巩固
int a = 0, 则 ~a = ?
答案:-1
解析:
a在内存中存储为:00000000 00000000 00000000 00000000
~a在内存中存储为 : 11111111 11111111 11111111 11111111 (首位1,因此~a为负,是所求负数的补码形式)
~a -1 得到所求负数的反码:11111111 11111111 11111111 11111110
按位取反(~a -1)得到所求负数的原码:10000000 00000000 00000000 00000001 = -1