为什么简单XOR在Perl中不起作用? my$list=“1 3”; 我的@arr=split'“$list; my$c=$arr[0]^$arr[1]; 打印$c,“\n”;
以上是一个不正常的特征为什么简单XOR在Perl中不起作用? my$list=“1 3”; 我的@arr=split'“$list; my$c=$arr[0]^$arr[1]; 打印$c,“\n”;,perl,xor,Perl,Xor,以上是一个不正常的特征 它的答案应该是2,因为1或3是2。^考虑其操作数的内部存储格式,以确定要执行的操作 >perl -E"say( 1^3 )" 2 >perl -E"say( '1'^'3' )" ☻ 后者对字符串的每个字符进行异或运算 >perl -E"say( chr( ord('1')^ord('3') ) )" ☻ 可以通过添加零来强制numification >perl -E"@a = split(' ', '1 3'); say( (0+$a[0]
它的答案应该是2,因为1或3是2。
^
考虑其操作数的内部存储格式,以确定要执行的操作
>perl -E"say( 1^3 )"
2
>perl -E"say( '1'^'3' )"
☻
后者对字符串的每个字符进行异或运算
>perl -E"say( chr( ord('1')^ord('3') ) )"
☻
可以通过添加零来强制numification
>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
从技术上讲,您只需要将其中一个操作数设为数字
>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
这里有两个问题:
和$c1
在开始时未定义李>$c2
- 它们是弦李>
int
函数显式转换为数值 您正在将数组拆分为@arr
,但随后尝试操作$c1
,$c2
,$c
。那是行不通的。另外,您正在尝试对字符串执行位操作。您正在尝试对字符串“1”而不是数字1进行异或运算。通过执行算术运算来隐式转换与显式转换(例如,int()
?@Sobrique)相比,有什么特别的优势吗?它们都是显式使用的数学运算,隐式用于返回数字0+$
更通用-它适用于所有数字-而int($
只适用于整数(在这种情况下这就足够了)。@Sobrique,除了在更多情况下工作外,0+
是重载.pm使用的数字符号,它与并行。”.
用于字符串化。只需对其中一个操作数进行NUMIF运算,即可将其变为数字异或
$list="1 2 3";
@arr=split(" ",$list);
$c=int($arr[0])^int($arr[2]);
print "$c";