c语言中数据类型的自动转换原则

由低级向高级转换的原则


最近几天参加一公司招聘,其中有一道笔试题是这样的:

如下程序的输出结果是?

#include<stdio.h>
int main()
{
	unsigned int a=6;
	int b=-20;
	(a+b>6)?printf(">6"):printf("<=6");
	system("pause");
	return 0;
}
正确答案是:

至于原因就是上面所讲的规则,b先变为unsigned型。学过计算机基础的都知道,负数是以补码的形式存在计算机中的,所以int 型的b在内存中的值为0xffffffec(vc6.0中int型为32位),化为十进制数即为4294967276,a+b=4294967276+6=4294967282

在实际调试中也是这个值

从这个意义来说,无符号数的运算优先级要高于有符号数,式子中如果有unsigned型,则所有变量都要先变为unsigned型再运算。

补充一点,c语言在下面几种情况都发生自动类型转换:

      1、算术运算式中,低类型能够转换为高类型。
      2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
      3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
      4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值