【学习笔记】c语言 自动类型转化

文章通过一道编程题解释了C语言中的自动类型转换规则。在混合运算中,当数据类型不同时,编译器会按照特定规则进行转换。在unsignedint和int运算时,int会被提升为unsignedint,由于unsignedint没有负值,导致结果始终大于6,因此代码输出为>6。

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

前言:有这么一道题

下面的代码输出是什么,为什么?
void foo(void)
{
	unsigned int a = 6;
	int b = -20;
	(a + b > 6) ? puts("> 6") : puts("<= 6");
}

显然 我猜测输出 >6,但我不知道为什么,只知道 a 是无符号 int,b是有符号 int

正文
上面的题涉及到了自动类型转换

  • 什么是 自动类型转化

编译系统会在混合运算时进行自动类型转换

  • 什么是混合运算

对于双目运算符,两个操作数的数据类型不同,这称为混合运算

  • 自动类型转换的原则:

为两个操作数的计算尽可能多的提供存储空间

  • 形象的描述转换规则
    自动类型转换规则

图中,横向向左的箭头表示必定转换,如short型数据和char型数据进行运算,先将它们转换成int在进行运算

纵向箭头表示当运算对象为不同类型时的转换方向,如int型数据和double型数据进行运算时,int型数据转换成double后再进行运算

有了这些理论依据
回到这道题
是 unsigned int 型 和 int 型 运算,int型转换为unsigned int,unsigned int 没有符号位,且unsigned int 型数据都满足 >= 0,则结果必定大于6,输出> 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值