bash - 为什么对两个大的二进制数进行异或运算会得到十进制输出?

标签 bash

我正在尝试对两个大的二进制值进行异或运算。然而,

echo ${hashArray[1]}
echo ${hashArray[2]}
echo $((${hashArray[1]} ^ ${hashArray[2]}))

给出:

10100100000111101011100001101110000110000100001000000111001001100010110000010010111101100110111001111100010010000000010101110111

00001110110000010110101101011011100101101000011100011101001101101010000100110001001110101101111100010001111010100011010000000100

4018181242766406943

为什么 echo $((${hashArray[1]} ^ ${hashArray[2]})) 输出一个十进制数?它不应该是另一个大的二进制值吗?

最佳答案

bash 确实有 support for binary numbers ,但是您的数字太大,将被截断。要么按照 mana 的建议去做,要么拆分字符串,要么使用可以处理任意精度的库,例如想到 perl 的 Math::BigInt:

xor.pl

use Math::BigInt;

$x = Math::BigInt->new("0b" . $ARGV[0]); 
$y = Math::BigInt->new("0b" . $ARGV[1]);

print $x->bxor($y)->as_bin;

为方便起见,将数字分配给变量:

x=10100100000111101011100001101110000110000100001000000111001001100010110000010010111101100110111001111100010010000000010101110111
y=00001110110000010110101101011011100101101000011100011101001101101010000100110001001110101101111100010001111010100011010000000100

运行:

perl xor.pl $x $y

输出:

0b10101010110111111101001100110101100011101100010100011010000100001000110100100011110011001011000101101101101000100011000101110011

关于bash - 为什么对两个大的二进制数进行异或运算会得到十进制输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12634503/

相关文章:

Linux bash 脚本,用于添加数字的递归

android - 从脚本中确定 Android sdk 位置

bash - 这是对 `cat` 的无用使用吗?

bash - 在此Docker compose命令中 “--”是什么意思?

regex - 按字符在字符类中的位置对 grep 匹配项进行排序

bash - 如何在 bash 中 grep 直到循环中的字符串?

bash - 如何拆分文件并并行处理它们,然后将它们拼接回去? unix

bash - Grep 在目录中查找包含字符串的文件

bash - 为什么命令错误| grep 'regex-not-matching-error' 仍然打印错误?

python - 如何将 base64 字符串作为 Python 脚本的参数传递?