C整型升级和寻常算术转换以及数据类型转换

本文探讨了算术表达式中的整型升级现象及数据类型的寻常算术转化过程。详细解析了不同数据类型间的转换规则,包括从短数据类型到长数据类型的自动升级和从长数据类型到短数据类型的截断行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在算术表达式中存在整型升级和寻常算术转化问题

(unsigned)char,(unsigned)short --> ( unsigned )int -->float -->double -->long double

float、double、long double为浮点型数据。当没有浮点型数据参与计算时,统一转为(unsigned)int

例如:

char a=1,b=1,c;
printf("%d,%d",sizeof(c=a+b),sizeof(a+b));//结果为1,4
printf("%d",c);//报c未被初始化警告。说明上面c=a+b 并未对c进行赋值
printf(" %d ", sizeof 'A'); //结果为4

的结果是4, 是int的长度,编译器首先将'A'升级为整数97,再调用sizeof。
//以上说明1.计算中间转为了int类型,2、并未将运输结果赋值
int d = -1;

if (d <= sizeof(arr)/sizeof(arr[0])) 
//sizeof返回unsigned int,故需将d看成unsigned int数据,所有d值非常大。

二、数据类型转换

 2.1 长数据类型转为短数据类型,直接截断即可

 2.2 短数据转长数据类型,需区别有无符号

unsigned int i = 257;
char c = i;//结果 c = 1

signed char c = 128;
unsigned int i = c;//i = 1111...1000,0000 最大值-128


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值