做了几个小实验,是Linux下写的程序,用g++编译后运行,得出了这么个结论:
前提假设:两个整型类型分别是typeA和typeB,且bit(typeA)<bit(typeB) ,即,typeA的字长比typeB的字长 短
结论1
把typeA强制转化成为typeB类型(短到长),会把typeA的所有bit(包括最高位)拷贝到typeB的低位部分,而typeB的高位空余bit(如果有的话)用0或1填充,填充规则:若typeA的数是一个正数,则用0填;若是负数,就用1填。这里的正和负,指的是数值上的正和负,并不是取决于最高位,因为unsigned型正数的最高位也可以是1,如例2。
结论2
反过来,把typeB强制转化成为typeA类型(长到短),若typeA是K个bit(包括最高位),则把typeB的低K位原封不动拷贝到typeA,而typeB高位剩余的bit被舍弃
另:对于typeA和typeB字长相等的状况,结论1和结论2都适用
结论1举例:
例1:
char c = -86;
unsigned int b = c;//b的值是4294967210
b = -86//b仍然是4294967210,这是一个int到unsigned int的等字长转换
例2:
unsigned char c = 255;
int b = c;//b仍然是255
结论2举例:
例3:
char c = 0xaa;// c实际上是-86,这是一个unsigned int 到 char的强制转换,0xaa在unsigned int中的补码是000...000010101010,而它的低8位正好是char型的-86的补码
int b = c; //b是-86
usigned int bb = c; //bb是4294967210,这是参照例1中给出的结果
例4:
unsigned short s = -256;//s实际上是65280