Perl 中的位操作与位向量使用指南
1. 一元取反运算符(~)
在 Perl 里,一元取反运算符 ~
会对数值的每一位进行取反操作。不过,当使用普通的 print
函数输出结果时,Perl 会把它当作无符号值处理。这就导致原本为正数的数值,其符号不会因位翻转而改变;而负数会变为正数。
以下是示例代码:
#!/usr/bin/perl
# unary-not.pl
foreach my $value ( 255, 128, 5, 65534 )
{
my $negated = ~ $value;
printf " value is %#034b %d\n", $value, $value;
printf "~ value is %#034b %d\n", $negated, $negated;
print " value is ", $negated, "\n\n";
}
运行这段代码的输出可能会让不了解情况的人感到困惑。示例输出如下:
value is 0b00000000000000000000000011111111 255
~ value is 0b11111111111111111111111100000000 -256
value is 4294967040
value is 0b00000000000000000000000010000000 128
~ v