Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么简单XOR在Perl中不起作用? my$list=“1 3”; 我的@arr=split'“$list; my$c=$arr[0]^$arr[1]; 打印$c,“\n”;_Perl_Xor - Fatal编程技术网

为什么简单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
    在开始时未定义
  • 它们是弦
(我假设缺少一点,例如'c1'和'c2'被提取为列表的第一个/最后一个元素,分别为1和3)

尝试:


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";