有谁能解释一下C程序的输出?

时间:2015-09-15 11:43:04

标签: c

#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
}

我认为输出应该是&#34; b&#34;但它不是。

输出:a

2 个答案:

答案 0 :(得分:4)

C99标准,第6.3.1.8节

  

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

所以这里.site-footer { position: absolute; min-width: 1024px; width: ??; height: ??; right: 0; bottom: 0; left: 0; text-align: center; overflow: hidden; } .site-footer .footer-bg { float:left; /* Set rules to fill background */ min-height: 100%; min-width: 1024px; /* Set up proportionate scaling */ width: 100%; height: auto; }(值= -20)转换为b(一个大值),它将等同于 -

unsigned type

因此,输出为 ( a+(unsigned int)b > 6 ) 而不是a

答案 1 :(得分:1)

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