深入char转换为int/unsigned int的内部机制分析

char转换为int/unsigned int的分析
说明:试环境为vc++ 6.0
在vc++6.0中char是被看成signed char的,那么char所能表示的整数范围为-218--+127首先分析一下转换为int的情形:
1,如果char表示的范围在-128--+127之间,那么,转换成整数的时候数值大小不变,例如:
2,如果char的表示范围不在-128到+127之间,情形为取最低的8为然后转换为int,例如:
char h=128;
int inv=ch;//此时inv值为-128
上面的结果为什么是-128呢?分析如下:h在内存中的内容为(从左到右依次为从高位到低位,下同)10000000(补码形式)
把h中的内容放到inv中时,首先判断第一位为1,肯定是负数,然后把10000000转换为原码还为10000000,所以inv的值就为-128了。
下面分析一下转换为unsigned int的情形:
1、如果char型变量的取值为0-+127之间,转换为int型之后数值不变
char h=i//i为0到+127之间的整数
int inv=h//inv的值也为0到+127之间的整数
2、如果char型变量为负值,则取低8位,如果第8为1,扩展的时候添1,如果第8为0,扩展的时候添0。例如:
char h=-129
unsigned int inv=h
此时inv的值为+127,为什么呢?分析如下:-129写为二进制位101111111(补码表示),取低8位为01111111,由于第八位为0,扩展为32int时候高位添加的是0,所以inv的值为+127
char h=-1;
unsigned int inv=h
此时inv的值为4294967295,即2^32—1,为什么呢?分析如下:-1写成二进制为11111111(补码表示),取低8位为11111111,由于第八位为1,扩展为32int时候高位添加的是1,所以inv的值为2的32次方减1,即4294967295。
好了,有了上面的分析和例子,我们已经明白了char转换成int/unsigned int的内部机制,那么unsigned char转换成int/unsigned int 情况又是怎么样的呢,我相信有了上面的例子和分析,读者朋友们可以很容易得出相应的转换机制来,有兴趣的朋友自己可以试一下,这里就不在赘述了。
The End,Thanks very much.
 
最后说明,如有转载请标明作者和出处,本博客所有权归博客园和本作者所有。
原文地址:https://www.cnblogs.com/wangyichao/p/2709185.html