10 x 0.8 + 14 x 0.2 = 10.8
请解释上面的代码(if / else条件及其打印方式" Odd"" Even")
答案 0 :(得分:2)
确定数字是"奇数"或者"甚至"在下面的逻辑块中。
if (num & 1)
...
else
...
如果数字为奇数,则binary representation将LSB设为1.因此,对于奇数
if (num & 1)
将评估为TRUE。
不用说,对于偶数,相同的表达式将评估为FALSE。
[注意:&
此处为bitwise AND operator]
现在,#define
为preprocessor MACRO,MACRO
将被MACRO定义的代码块替换,打印出所需的结果。
答案 1 :(得分:1)
if (num & 1)
检查num的第0位是否为1.每个LSB为1的数字为奇数,每个数字为0,0为0,为偶数。
答案 2 :(得分:1)
在二进制中,任何数字LSB(最低有效位)为set
或1
表示数字为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
表示false
或1
表示true
。例如,num = 5
,因此:
5 & 1 (decimal)
= 101 & 001 (binary)
= 001
= true (boolean)
,if (num & 1)
将转到true
路径
MACRO(num, "Odd");
然后macro
将替换为代码块(num
代表5
而str
代表Odd
。)
剩下的由你决定。欢呼声。
阅读Macros和Bitwise operations in C以便更好地理解。