关于整型提升

    经历了很惨痛的教训之后,我终于理解了整型提升(隐式类型转换)这个看起来很不经意的小东西,为了让我永远记住这个小教训,我决定把它写下来。(虽然我可能以后也不会这样写程序)

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
	unsigned char a = 200;
	unsigned char b = 100;
	unsigned char c = 0;
	c = a + b;
	printf("%d %d ",a+b,c);

	system("pause");
	return 0;
}                                  //结果:300 44


int main()
{
	char c;
	unsigned char uc;
	unsigned short us;
	c = 128;
	uc = 128;
	us = c + uc;
	printf("0x%x\n",us);
	us = (unsigned char)c + uc;
	printf("0x%x\n",us);
	us = c + (char)uc;
	printf("0x%x\n",us);

	system("pause");
	return 0;
}                                  //结果:0x0 0x100 0xff00
                                                   


        这样的结果在我第一次看到简直觉得不可思议(事实上自我学习C语言来我不可思议的次数原本我能够毫无障碍地读懂一个程序的时候来的多得多得多),这里就涉及到整形提升。

        C的整型算数运算总是至少以缺省整型类型的精度来进行的,为了获得这个精度,表达式中的字符型和短整型操作数在使用之前被转换为普通整型。(这句话出自《C和指针》)这样我们就可以很轻松地解决上面这两个小程序了。还有一个需要注意的地方是,char在表示整数时范围为-128到127,unsigned char的表示范围则是0到255.

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值