我想计算这个:
0x0404cb * 2**(8*(0x1b - 3))
这在十进制中是:
263371*2^^(8*(27-3))
使用| bc
。
我尝试使用
echo 263371*2^^(8*(27-3)) | bc
expr 263371*2^^(8*(27-3)) | bc
zsh: no matches found: 263371*2^^(8*(27-3))
或者尝试解决这个问题。
238348 * 2^176^
我能一次性解决吗?
bc 中的“power of”运算符是 ^
。为了防止 shell 尝试执行历史替换和路径名扩展,或将括号解释为子 shell,您还需要引用所有内容:
$ bc <<< '263371*2^(8*(27-3))'
1653206561150525499452195696179626311675293455763937233695932416
ibase
特殊变量将输入设置为十六进制,并进行一些额外的处理。eqn='0x0404cb * 2**(8*(0x1b - 3))'
# Replace "**" with "^"
eqn=${eqn//\*\*/^}
# Remove all "0x" prefixes
eqn=${eqn//0x}
# Set ibase to 16 and uppercase the equation
bc <<< "ibase = 16; ${eqn^^}"
或者,不使用参数扩展,而是使用更简洁但不够易读的(GNU) sed:
sed 's/\*\*/^/g;s/0x//g;s/.*/\U&/;s/^/ibase = 16; /' <<< "$eqn" | bc
bc <<< 'ibase=16;x=404CB;y=1B;ibase=10;x*2^(8*(y-3))'
。 - Nahuel Fouilleul8
在二进制和十进制中是相同的,我们可以将ibase
设置为16并将输出保留为十进制,我会添加这个。 - Benjamin W.
bc
不理解^^
。这是什么意思? - hek2mgl