这段代码如何打印奇数和偶数?

时间:2015-06-22 06:51:44

标签: c

10 x 0.8 + 14 x 0.2 = 10.8

请解释上面的代码(if / else条件及其打印方式" Odd"" Even")

3 个答案:

答案 0 :(得分:2)

确定数字是"奇数"或者"甚至"在下面的逻辑块中。

 if (num & 1)
 ...
 else
 ...

如果数字为奇数,则binary representationLSB设为1.因此,对于奇数

 if (num & 1)

将评估为TRUE。

不用说,对于偶数,相同的表达式将评估为FALSE。

[注意:&此处为bitwise AND operator]

现在,#definepreprocessor MACROMACRO将被MACRO定义的代码块替换,打印出所需的结果。

答案 1 :(得分:1)

if (num & 1)检查num的第0位是否为1.每个LSB为1的数字为奇数,每个数字为0,0为0,为偶数。

答案 2 :(得分:1)

在二进制中,任何数字LSB(最低有效位)为set1表示数字为odd,而LSB 0表示数字为even }。

让我们来看看:

Decimal    binary
1            001  (odd)
2            010  (even) 
3            011  (odd)
4            100  (even)
5            101  (odd)

SO,以下一行

num & 1

生成0表示false1表示true。例如,num = 5,因此:

  5 & 1 (decimal)
= 101 & 001 (binary)
= 001
= true (boolean)

if (num & 1)将转到true路径

MACRO(num, "Odd");

然后macro将替换为代码块(num代表5str代表Odd。)

剩下的由你决定。欢呼声。

阅读MacrosBitwise operations in C以便更好地理解。