我目前正在尝试研究leviathan流密码的源代码。 不幸的是,有一些我不理解的代码块。
这是第一个:
if (i & leaf_number) {
g(x, y, z, L->F); /* right */
}
我不明白的是,为什么原始编码员使用i & leaf_number
if (statements)
。
答案 0 :(得分:0)
他可能只有在g
和AND
的{{1}}位i
为leaf_number
时才会致电true
,即1
它会检查{{1}}条件是否为非零。
答案 1 :(得分:0)
使用C的隐式规则,零为false
,非零为true
。
所以,请将其读作:
if((i & leaf_member) != 0) /* Any of leaf_member's 1-bits also 1 in i? */
换句话说,如果当前在if
中设置了位掩码leaf_member
中的任何,则会i
。
希望在leaf_member
中只设置一个位,然后测试自然只适用于该位。如果有多个位,则比较应为:
if((i & leaf_member) == leaf_member) /* All of leaf_member's 1-bits 1 in i? */