char 数据类型占一个字节,共8位;
其范围为-128至127,即:
0x80---------------0x7f
1000 0000 --- 0111 1111
从二进制数的形式可以看到:排除首位的符号位,其他7位是从000 0000 至 111 1111 的数据是逐渐变大的,这与我们平时十进制的思维习惯是相同的,即-128至127,-128最小,127最大,从-128至127是以1递加的。
正数有128个(包括0),负数也有128个,故循环周期为256.
我们知道越限数据的结果是在char类型的范围内循环的,具体分析参考本文。以下我们抽象出计算方法:
计算机只会算加法,减法计算转换为加法计算
-129 = -128 -1 = 0x80 + 0xff = 0x7f (进位1被舍去) = 127 = 127 - (1-1)
-138 =-128-10 =0x80 + 0xF6 = 0x76 (进位1被舍去) = 118 = 127 -(10 -1)
-128- N = 127 - ( N-1)
128 = 127 +1 = 0x7f +0x01 = 0x80= -128 = -128 +(1-1)
137 = 127 +10 = 0x7f + 0x0a = 0x89= -119 = -128 +(10 -1 )
127 + N = = -128 + (N-1)
总结:
负数越限,计算方法:127 -(N-1)
正数越限,计算方法:-128 +(N-1)
256 = 127 +129 = -128 +(129-1) = 0;
-256 = -128 - 128 = 127-(128-1)= 0;
举例:
char ch = -1000 = -256*3-128-104 =-768 - 128- 104 = 0-128-104 = 127 -(104-1)= 24
char ch = 1000 = 256*3 +128 +104 =768+128 +104 = 0 +127+105 = -128+(105-1) = -24