在这里先向大家道个歉,之前在char类型-128到127文章中没有讲清楚原反补的具体求解过程,并且犯了严重的错误,补码-128是不存在原码和反码.
简单介绍一下原码的取值范围都是-128到+127,并且0都存在两种状态+0和-0。补码中0只有一种状态00000000,并且1000000代表-128,这也就是补码取值范围是-128到+127的原因了。
以下是原码-128到+127到反码补码和移码的变换过程
-127 | -126 | -125 | …… | -3 | -2 | -1 | -0 | +0 | 1 | 2 | 3 | …… | 125 | 126 | 127 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
原 | 11111111 | 11111110 | 11111101 | …… | 10000011 | 10000010 | 10000001 | 10000000 | 00000000 | 00000001 | 00000010 | 00000011 | …… | 01111101 | 01111110 | 01111111 | |
反 | 10000000 | 10000001 | 10000010 | …… | 11111100 | 11111101 | 11111110 | 11111111 | 00000000 | 00000001 | 00000010 | 00000011 | …… | 01111101 | 01111110 | 01111111 | |
补 | 100000001 | 10000001 | 10000010 | 10000011 | …… | 11111101 | 11111110 | 11111111 | 2 | 00000000 | 00000001 | 00000010 | 00000011 | …… | 01111101 | 01111110 | 01111111 |
移3 | 00000000 | 00000001 | 00000010 | 00000011 | …… | 01111101 | 01111110 | 01111111 | 10000000 | 10000001 | 10000010 | 10000011 | …… | 11111101 | 11111110 | 11111111 |
无符号的取值是8位全零到8位全1,即0到255
原码-127到+127
反码-127到+127
补码-128到+127
移码-127到+127