if语句在stream cipher leviathan源代码中计算整数

时间:2014-05-28 10:17:35

标签: c if-statement encryption bit-manipulation

我目前正在尝试研究leviathan流密码的源代码。 不幸的是,有一些我不理解的代码块。

这是第一个:

if (i & leaf_number) {

  g(x, y, z, L->F);  /* right */

}

我不明白的是,为什么原始编码员使用i & leaf_number if (statements)

2 个答案:

答案 0 :(得分:0)

他可能只有在gAND的{​​{1}}位ileaf_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? */