設定ibase
とobase
は、同じベースで設定する必要があることを意味します。あなたの例を説明することはこれを示します:
echo "ibase=F;obase=A;C0" | bc
bc
「ibase = F」でベース15で表される入力番号を考慮するように設定します。「obase = A」は、出力番号をデフォルトの10に設定します。
bc
15を基数としてC0を読み取ります:C =12。12* 15 = 180。
echo "ibase=F;obase=10;C0" | bc
この例では、入力を基数15に設定し、出力を基数15で10に設定しているため、出力基数は15です。基数15のC0入力は基数15のC0出力です。
echo "ibase=16;obase=A;C0" | bc
入力を基数16に設定し、出力を基数10に設定します(基数16のAは基数10で10です)。
10を基数に変換したC0は、12 * 16 = 192です。
私の個人的なルールは、ベース10を使用できるように、最初にobaseを設定することです。次に、ベース10も使用してibaseを設定します。
bc
皮肉な例外があることに注意してください:ibase=A
そして、obase=A
常に10を基数として入力と出力を設定しますbc
。manページから:
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を使用して常にベースを設定することをお勧めします。混乱しないようにしてください。