为什么“bc”忽略了我的“obase”?

为什么“bc”忽略了我的“obase”?
>>> bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
ibase = 16 
obase = 56
BE753DE5C17F1B6C9F5D1E8A628B74B0FFC4A7
 13 54 52 19 83 18 71 14 32 84 08 11 54 04 20 50 49 70 30 00 29 44 7\
7 33

输入显然是十六进制的。现在我假设输出应该是 56 进制的“数字”的十进制表示。但那么最高的输出块应该是 55,对吧?那么为什么我看到的是“83”和“84”呢?

答案1

声明ibase16 进入bc十六进制模式,因此下一行:

obase = 56

实际上被解释为十六进制:0x56= 十进制的 86,这就是为什么输出“数字”包含的值不超过 85。

交换声明的顺序ibaseobase解决这个问题:

obase = 56
ibase = 16
BE753DE5C17F1B6C9F5D1E8A628B74B0FFC4A7
 01 27 46 38 00 54 21 49 15 55 31 13 08 39 08 26 31 35 14 01 25 24 0\
6 13 11 36 07

和:

38
 01 00

相关内容