标签:style blog color io strong ar for 数据 div
C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型、内容都不变。
以下代码,都用GCC编译。
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("%d %d\n", ‘a‘, sizeof((int)‘a‘)); //输出为97,4. sizeof的作用对象为一个int型中间变量
6
7 char c = 255;
8 printf("%d\n", c); //输出-1. char型的c已溢出,隐式转换为int后同样保持为-1
9
10 return 0;
11 }
之前以为单引号多字符,比如‘123‘会报错,测试了一下才发现只会警告(GCC,代码里给出警告信息),能编译通过:
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("%d\n", ‘1‘ ); //输出49
6 printf("%d\n", ‘12‘ ); //输出12594 警告:warning: multi-character character constant
7 printf("%d\n", ‘123‘ ); //输出3224115 警告:同上
8 printf("%d\n", ‘1234‘ ); //输出825373492 警告:同上
9 printf("%d\n", ‘12345‘ ); //输出842216501 警告:warning: character constant too long for its type
10 printf("%d\n", ‘123456‘ ); //输出859059510 警告:同上
11 printf("%d\n", ‘1234567‘ ); //输出875902519 警告:同上
12 printf("%d\n", ‘12345678‘ ); //输出892745528 警告:同上
13 printf("%d\n", ‘123456789‘); //输出909588537 警告:同上
14
15 return 0;
16 }
以上分别输出1~9个数字组成的字符字面值,输出类型为int型,中间有个隐式类型转换的过程。
第一行输出‘1‘的ASCII码值49;
第二行则将‘1‘和‘2‘的ASCII码值分别赋予int型中间变量的低位2个字节,即0x3132,所以输出为12594 = (49 << 8) + 50;警告信息提示为多字符字面值;
第三四行的结果原理同上;
第五行以下的,原理同上,但是只取低4位,例如第9行,只取‘6789‘,即0x36373839;警告信息提示字符字面值超出int类型的字节数。
标签:style blog color io strong ar for 数据 div
原文地址:http://www.cnblogs.com/qieerbushejinshikelou/p/3949390.html