The type promotion rules (类型提升规则,以及类型转换规则)
- int main(int argc, char *argv[])
- {
- // printf(" %d ", sizeof 65);
- printf(" %d ", sizeof 'A');
- system("pause");
- return 0;
- }
Type conversions in C are much more widespread than is generally realized. They can also occur in
any expression that involves a type smaller than int or double. Take the following code, for example:
如上代码,输出可能是1 可能是4,如果’A’ 字面意思 那么就是char,而’A’ 的ASCII 是 65是一个int ,所以输出
在不同额编译器下输出不同,这就是类型提升,此例中char类型被提升为int类型,GCC下输出4,VS输出1
规则如下:

又如
正负转换:
- int main(int argc, char *argv[])
- {
- char a, b, c;
- a = 'a';
- b = 'b';
- c = a + b;
- //195=11000011
- // 00111101
- cout << (int)(char)(0xc3);
- system("pause");
- return 0;
- }
由于+运算,根据提升 规则char被提升为int 结果就是int 的195,195=0xc3 被赋值给char 11000011 取反加一 变为00111101加上负号,其结果为-61,同理
- int main(int argc, char *argv[])
- {
- cout <<( int) ( char)(0xff) ;
- return 0;
- }
转换为char 后 取反加一 为 0000001 加上负号输出-1
小字节转换为大字节:高位补0,
大字节转换为小字节:截断
- int main(int argc, char *argv[])
- {
- cout << (int)(char)(0xff)<<endl;
- cout << (int)(char)(0x7fff) << endl;
- cout <<(int) (char)(int)(0x7fff) << endl;
- return 0;
- }
Tip:强制转换内存实际数据不变 具体表现出来的值按照目标数据类型规则来算