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 














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值