我目前正在尝试研究利维坦流密码的源代码。 不幸的是,有一些代码块我不理解。
这是第一个:
if (i & leaf_number) {
g(x, y, z, L->F); /* right */
}
我不明白的是,为什么原始编码器使用i & leaf_number
作为if(语句)
。
最佳答案
它使用了 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? */
关于c - if 语句计算流密码 Leviathan 源代码中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908872/