设置ibase
意味着您需要以obase
相同的基础进行设置。解释您的示例将显示以下内容:
echo "ibase=F;obase=A;C0" | bc
您设置bc
为考虑输入数字,如基数15中用“ ibase = F”表示。“ obase = A”将输出数字设置为以10为底,这是默认值。
bc
将C0读取为以15为底的数字:C =12。12* 15 = 180。
echo "ibase=F;obase=10;C0" | bc
在此示例中,将输入设置为以15为底,然后将输出设置为10(以15为底),因此输出以15为底。C0以15为底的输入是C0以15为底的输出。
echo "ibase=16;obase=A;C0" | bc
将输入设置为基数16,将输出设置为基数10(基数16中的A为基数10中的10)。
转换为10的C0为:12 * 16 = 192
我的个人规则是先设置obase,以便我可以使用10为底。然后再设置ibase,也可以使用10为底。
请注意,bc
确实存在一个具有讽刺意味的例外:ibase=A
并且obase=A
始终将输入和输出设置为以10为底。在bc
手册页中:
Single digit numbers always have the value of the digit
regardless of the value of ibase.
此行为体现在以下规范中bc
:从2004 OpenGroup bc
规范中:
When either ibase or obase is assigned a single digit value from
the list in 'Lexical Conventions in bc', the value shall be assumed
in hexadecimal. (For example, ibase=A sets to base ten, regardless
of the current ibase value.) Otherwise, the behavior is undefined
when digits greater than or equal to the value of ibase appear in
the input.
这就是为什么该ibase=F
设置将您的输入基准更改为15的原因,以及为什么我建议始终使用10为基准来设置基准。因此请避免混淆自己。