首页 > 试题广场 >

void foo(void){ unsigne...

[单选题]
void foo(void){
    unsigned int a = 10;
    int b = -20;
    ((a+b) > 10 )? printf(">10"):printf("<=10");
}

  • >10
  • <=10
不应该出现在java里面呀       跟java分类没关系
但是还是说一下
unsigned 是无符号数,2个操作数中有unsigned类型的默认将两个数都当做unsigned进行处理,然后看你的结果类型了~如果你的结果是有符号的结果值将被隐式转换为有符号的,结果为无符号的就是无符号的
所以,10+20=30>10   -->   true ? printf(">10"):printf("<=10");  三元运算符,执行前面的
执行 输出">10"
编辑于 2019-07-31 15:21:31 回复(3)
C中运算有规定,如果整型变量间进行数据运算,只要有一个变量是无符号的,结果就按无符号数据输出,因此(a+b) > 10 结果会输出>10
发表于 2019-08-12 21:47:52 回复(0)
在C中,无符号数与有符号数进行运算时,系统会自动将有符号数直接当做无符号数处理,即这里的b的二进制表示后为1111 1111 1111 1111 1111 1111 1111 0110,在运算时被当做无符号数,则b的值为2^31+2^30+...........,是一个很大的正数,加上a自然大于10;
发表于 2019-08-02 15:39:51 回复(0)
unsigned和signed运算,统一按unsigned运算
发表于 2019-10-08 15:24:24 回复(0)
signed转换为unsigned
发表于 2019-03-27 12:52:56 回复(0)