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