【问题标题】:Can anyone please explain the output of below C program? [duplicate]谁能解释一下下面C程序的输出? [复制]
【发布时间】:2015-09-15 11:43:03
【问题描述】:
#include<stdio.h>

int main(){
    unsigned int a = 6;    
    int b = -20;
    ( a+b > 6 ) ? puts( "a") : puts( "b");// if a+b > 6 then a else b
}

我认为输出应该是“b”,但事实并非如此。

输出:a

【问题讨论】:

  • 这里已经有很多关于混合有符号-无符号算术和比较的重复,但我现在找不到
  • Duplicate。另外,我认为?: 的第二和第三个操作数必须是算术或指针类型。
  • @Lundin:当然——但puts 确实是returns a value

标签: c


【解决方案1】:

C99 标准,第 6.3.1.8 节

如果无符号整数类型的操作数的等级大于或等于另一个操作数类型的等级,则将有符号整数类型的操作数转换为无符号整数类型的操作数的类型。

所以这里b(value= -20) 转换为unsigned type(一个很大的值),就相当于-

    ( a+(unsigned int)b > 6 )    

因此,输出是a 而不是b

【讨论】:

    【解决方案2】:

    表达式a + b 的类型是unsigned int,它是在算术运算符用于不同类型的操作数时应用的算术转换的结果。每个操作数都先转换为这种通用类型,将-20转换为unsigned int的结果是一个非常大的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 2012-06-21
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多