您好,我想将一堆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;
}
答案 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执行操作并测试非零值。