bc:为什么`ibase=16; obase=10; FF` 返回 FF 而不是 255?

23 bc

我一直在使用bc二进制到十六进制、八进制到十进制等之间的数字转换。

在以下示例中,我试图将基数为 16(十六进制)的数字转换为二进制、八进制和十进制。

前 2 次尝试我没有任何问题。

$ echo 'ibase=16; obase=2; FF' | bc  
11111111
$ echo 'ibase=16; obase=8; FF' | bc 
377
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将基数 16(十六进制)数字转换为基数 10(十进制)时,我得到了错误的答案。答案应该是255

$ echo 'ibase=16; obase=10; FF' | bc 
FF
Run Code Online (Sandbox Code Playgroud)

A.B*_*A.B 64

一旦ibase=16完成后,进一步的输入数字是十六进制的,包括10在obase=10其中代表十进制值16。因此,无论集之前obase的,或之后将其设置,使用新输入基(十六进制现在):

$ echo 'obase=10; ibase=16; FF' | bc
255
$ echo 'ibase=16; obase=A; FF' | bc
255
Run Code Online (Sandbox Code Playgroud)

  • 定理:每一个写成自身的乘法底数都是 10。 (14认同)
  • @Joshua,是的,我认为这几乎就是定义。 (8认同)