perl使用按位not运算符操作二进制字符串

perl使用按位not运算符操作二进制字符串,perl,Perl,假设我在perl中有一个字符串 $a = "001010"; 操作按位not运算符后,结果应为 ~$a = "110101"; 如何在perl中执行此操作?您可以使用oct和sprintf: $a = sprintf("%0".(length($a))."b", (~oct("0b".$a)) & (1 << length($a)) - 1); $a=sprintf(“%0”)(长度($a)).b、(~oct(“0b”).a))&(1一个解决方案使用正则表达式: $a

假设我在perl中有一个字符串

$a = "001010";
操作按位not运算符后,结果应为

~$a = "110101";

如何在perl中执行此操作?

您可以使用
oct
sprintf

 $a = sprintf("%0".(length($a))."b", (~oct("0b".$a)) & (1 << length($a)) - 1);

$a=sprintf(“%0”)(长度($a)).b、(~oct(“0b”).a))&(1一个解决方案使用正则表达式:

$a = "001010";

$a =~ s/([01])/1-$1/eg;

或者只使用
tr//

$str =~ tr/01/10/;

有多种方法可以做到这一点:

$str = join '' => map 0+!$_, split //, $str;

将字符串转换为数字;执行按位操作;然后将其转换回字符串。查看pack()/unpack()函数(
perldoc-f pack
)有关进行这些转换的详细信息。的确。对一个数字的二进制表示而不是数字本身进行位运算是非常奇怪的。这是最简单的方法,IMOReadability分数:0。(在Perl中可读性并不重要:)。此外,它对长位字符串也失败。