Perl << =和^ =含义

时间:2019-11-28 10:58:53

标签: perl

您好,我想将一堆Perl脚本转换为C#。 A拥有这段代码,我不知道<< =,^ =,&=的意思。有人可以告诉我该部分(???)的意思吗?预先感谢。

$cwl = 6;
$sr = 1;
    for ($i=0; $i<$gf::field; $i++) {
        $gf::log[$sr] = $i;
        $gf::alog[$i] = $sr;
        $sr <<= 1;
        if ($sr & (1<<$cwl)) {$sr ^= $prim} (???)
        $sr &= $gf::field;
    }

1 个答案:

答案 0 :(得分:2)

这些是:

  • <<= =左移等于运算符,将源变量的位向左移 n 位,然后分配回源变量。
  • ^= =按位XOR等于运算符。通过右手变量XOR设置源变量,并将其分配给源变量。
  • &= =按位AND等于运算符。 AND设置源变量和右侧变量,并将结果分配给源变量。

上面代码中的C#等效项:

左移

# Perl code
$sr <<= 1;

// C# code
sr = sr << 1;

按位XOR

# Perl code
$sr ^= $prim

// C# code
sr = sr ^ prim

按位AND

# Perl code
$sr &= $gf::field

// C# code
sr = sr & gf.field // or whatever you've named $gf::field

根据OP评论进行编辑

OP询问是否:

if ($sr & (1<<$cwl))

可以翻译为:

cwl=1 << cwl;
if (Convert.ToBoolean(sr) & Convert.ToBoolean(cwl))

我认为您在这里犯了一个错误。 cwl在Perl的原始if语句中未重新分配。

实际上,该操作的逻辑是说:

  • sr按位AND 1左移cwl正确吗?

我很想将Perl代码重写为:

if ((sr & (1 << cwl)) != 0)

为什么?原始语句确定if语句的结果是否为true。 Perl中的任何非零值都是true,因此我们需要按照Perl执行操作并测试非零值。