这个值赋值如何工作?

时间:2013-07-26 03:35:26

标签: c

我正在阅读K& R,以下代码让我感到困惑。请有人向我解释一下。提前谢谢。

int leap;
leap = year%4 == 0 && year%100 !=0 || year%400 == 0;

5 个答案:

答案 0 :(得分:12)

leap被赋予条件表达式的结果。

在它周围加上括号可能会让它更容易理解:

leap = ((year % 4 == 0) && (year % 100 !=0) || (year % 400 == 0));

如果不评估为真,则为0,否则为1。

E.g。对于year = 2012,您可以获得以下内容:

(year % 4 == 0) - 这是真的,所以这等于1

year % 100 != 0) - 这不是真的,所以再次等于1

(year % 400 == 0) - 不是真,等于0

然后用这些表达式替换它们的值:

leap = 1 && 1 || 0; - 让我们回到1;

答案 1 :(得分:3)

如果leap是闰年,则意图指定1 year,如果leap不是闰年,则指定0到year

year是闰年,如果它可以被4整除而不能被100整除,或者year可以被400整除。否则,它不是。赋值的右侧是此闰年规则的C代码转换。

如果year%4 == 0可被4整除,则

year为真 &&是和。
如果year%100 !=0不能被100整除,则year为真 ||是或。
如果year%400 == 0可被400整除,则year为真。

答案 2 :(得分:3)

它将返回true(1)或false(0)。您甚至可以将跳跃设置为布尔值。

int leap;
leap = year%4 == 0 && year%100 !=0 || year%400 == 0;

假设你的一年是2000年。

leap = 2000%4 == 0 && 2000%100 !=0 || 2000%400 == 0
leap = true(1) && false(0) || true(1)
leap =false(0) || true(1)
leap = 1;

始终使用paranthesis避免混淆。在这种情况下,您不会发现任何混淆,因为优先级是从左到右。

这就是声明的执行方式。

%, ==, !=, &&, ||

答案 3 :(得分:1)

基本上,条件的结果被分配到 leap
操作顺序仅为

1


year%4 == 0

2


year%100 !=0

3


 Result from 1 && Result from 2

4


 year%400 == 0

5


 Result from 3 || Result from 4

6


  leap = Result from 5


希望解释清楚,有帮助。

答案 4 :(得分:1)

好的,你已经得到了一些不错的答案。

简而言之,

%给出了余数

&&是逻辑AND操作

变量leap如果条件成立,则评估为1,否则为0

这是计算闰年的另一种方法:

leap = ((year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0));