perl使用按位not运算符操作二进制字符串
假设我在perl中有一个字符串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
$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中可读性并不重要:)。此外,它对长位字符串也失败。