0

不管 x 和 y 的值是多少,它都会返回 1。我不明白如何或为什么。我从教科书中复制了一个程序,所以这不是我写的。我们目前正在研究整数算术。

有人可以解释一下这段代码在做什么吗?谢谢!

#include <stdio.h>

int uadd_ok(unsigned x, unsigned y)
{
unsigned sum = x+y;
return sum >=y;
}

int main(int argc, char** argv) 
{ 
int x = 1, y = 5;

printf("Answer is: %d\n", uadd_ok(x,y));
    return 0;
}
4

2 回答 2

3

该表达式sum >= y是一个布尔值,因此它被转换为0或者1取决于它的值。由于xy是无符号的,假设没有溢出,您将始终拥有x + y >= y,因此结果始终为真,因此1

(想必该函数的重点是检查是否发生了溢出……)

于 2013-02-01T01:21:17.513 回答
2

由于 x 和 y 是无符号的,它们都是正数。因此,x 和 y 之和必须大于 y。所以 sum >= y 为真,它被转换为 1,因为您将其格式化为 %d。

于 2013-02-01T01:21:29.093 回答