为什么简单的XOR不能在Perl中运行?

Sau*_*ava 3 perl xor

my $list = "1 3";
my @arr  = split " ", $list;
my $c    = $arr[0] ^ $arr[1];
print $c, "\n";
Run Code Online (Sandbox Code Playgroud)

以上是一个异常的角色.

应该给出答案为2,因为1 XOR 3是2.

ike*_*ami 9

^ 考虑其操作数的内部存储格式以确定要执行的操作.

>perl -E"say( 1^3 )"
2

>perl -E"say( '1'^'3' )"
?
Run Code Online (Sandbox Code Playgroud)

后者xrs字符串的每个字符.

>perl -E"say( chr( ord('1')^ord('3') ) )"
?
Run Code Online (Sandbox Code Playgroud)

您可以通过添加零强制数字.

>perl -E"@a = split(' ', '1 3'); say( (0+$a[0])^(0+$a[1]) )"
2

>perl -E"@a = map 0+$_, split(' ', '1 3'); say( $a[0]^$a[1] )"
2
Run Code Online (Sandbox Code Playgroud)

从技术上讲,您只需要将其中一个操作数设为数字.

>perl -E"@a = split(' ', '1 3'); say( (0+$a[0])^$a[1] )"
2

>perl -E"@a = split(' ', '1 3'); say( $a[0]^(0+$a[1]) )"
2
Run Code Online (Sandbox Code Playgroud)

  • 您只需对其中一个操作数进行数字化即可使其成为数字异或 (2认同)