c中数据类型转换

数据类型的转换分为两种:
1. 小类型--->大类型的转换(符号扩充);

char a = 0xff;
int b;
b = a;
printf("%d\n",a);//打印-1
printf("%u\n",-1);//打印转成无符号整形在内存中的补码
printf("%d\n",b);  //打印-1


2. 大类型--->小类型的转换(数据的截断truncate),数据截断的过程中有可能发生数据的丢失;

隐式转换

a. 整形提升:在32位机中,所有低于32的整型数据,在运算过程中先要转换成32位的整形数,然后才能参与运算;
b. 混合提升: long double->double->float->unsigned int->int->short->char

#include <stdio.h>

void foo(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b > 6)?puts(">6"):puts("<=6");//打印>6
}
int main()
{
    foo();
    return 0;
}

例子中是混合提升的很好体现,在运算过程中int->unsigned int,比较好的理解是:6-20 = -14;-14在内存中(unsigned int)的补码是一个很大的数字,具体的数字是14 + 该数 = int表示的最大数值;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值