整形之间的强制转换
在强制类型转换中,我们常用的整形强制转换有无符号和有符号类型的强制转换。所以首先我们得介绍一下计算机中存储数字的方式,计算机中通常以补码的形式来存储数据,以8位数据为例,二进制与有符号数的对应关系为:
0
1
2
…
127
-128
-127
…
-1
0000 0000
0000 0001
0000 0010
…
0111 1111
1000 0000
1000 0001
…
1111 1111
无符号转有符号
0
1
2
…
127
128
129
…
255
0000 0000
0000 0001
0000 0010
…
0111 1111
1000 0000
1000 0001
…
1111 1111
所以对于有符号数,首先最高位是正负的标志位。要将无符号数强制转化为有符号数时,其内存上的二进制是不会改变的,只是我们对它的解释变了,即无符号数128强制转化有符号数即-128。
当然这样引申出来的一种好处就是对于有符号数的判断,如
char a; ... if((a>=0)&&(a<80)) { .... }
可以使用强制转化,省去一个判断条件