关于整型提升、算数转换

本文解析了一个C语言代码片段,讨论了全局变量、静态变量与局部变量的不同存储区域,以及sizeof操作符的类型影响。重点讲解了整型提升和算数转换的概念,解释了为什么`if(i>sizeof(i))`会输出>。阅读者可深入了解C语言中的类型行为。
摘要由CSDN通过智能技术生成

给出代码:请问打印 ">" 还是 "<"?

int i;
int main()
{
	i--;
	if (i > sizeof(i))
	{
		printf(">\n");
	}
	else
	{
		printf("<\n");
	}

	return 0;
}

想要解决这个问题,我们需要理解

1、全局变量,静态变量(static)都是放在静态区,不初始化的时候,默认被初始化为0.

2、局部变量,是放在栈区,不初始化,默认是随机值

3、sizeof这个操作符计算返回的结果是size_t类型的,是无符号整型的

那么对于if(i > sizeof(i))   // -1 > 4 

-1是负数即int类型,而 这里的4是unsigned int类型,这里就发生了算数转换

10000000000000000000000000000001(-1的原码)

1111111111111111111111111111111111111(-1的补码)

也就是说-1(int类型)算数转换成了4,294,967,295(unsigned类型)

4,294,967,295显然大于 4

4、整型提升和算数转换

这里对C语言的常见类型以 int类型 为分界线,字节数小于int类型的转化成int类型,称为整型提升

而int类型向上(字节数更大)转化成其它类型,称为算数转换

关于整型提升和算数转换,感兴趣的小伙伴可以点这里

关于本章开头的代码问题详解,感兴趣的小伙伴可以点这里。(在59分钟)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值