C语言的自动类型转化

C语言赋值过程中,如果待转换的值和目标类型不匹配怎么办?这取决于转化涉及的类型,规则如下:

1、如果目标类型是无符号整型时,且待赋的值是整数时,额外的位将被忽略。例如:如果目标类型是8位的unsigned char,则最终被赋的值是原始值%256;

char ch = 1107;
print("ch = %c \n", ch);  //输出为ASIC码值为1107%256=83的字符,即S

unsigned int i = 4294967296;  //1111 1111 1111 1111 1111 1111 1111 1111 = 2^32
cout << i << endl;   //输出为:0

2、如果目标类型是有符号整形,且待赋的值是整数时,结果因实现而异;

int i = 4294967295;  //1111 1111 1111 1111 1111 1111 1111 1111
cout << i << endl;   //输出为:-1

3、如果目标类型是整形,且待赋的值是整数,结果是未定义的;

     如果把一个浮点值转化成整数类型会怎样?当浮点类型降级为整数类型时,原来的浮点值会被截断。例如:23.12和23.99都会被截断为23,-23.55会被截断为-23;


ps:上面的测试使用的IDE是C-Free,gcc版本4.9.2


参考:

[1] 我对补码的理解

[2]C primer plus P125 














猜你喜欢

转载自blog.csdn.net/baidu_35679960/article/details/79957274