bc 是 Linux 下的命令列式的计算器。 题目虽然叫任意进位制,但是因为 bc 的限制,输入进位制是 2~16 范围;输出进位制是 2~999 范围。这与常见计算器的进位制范围是一致的,比如 windows 计算器最高也只能处理 16 进位制输入资料。
一、 bc 计算器的使用
bc 计算器预设输入、输出都为 10 进位制。
[root@CentOS6 ~]# bc #开启 bc 计算器
bc 1.06.95
Copyright 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
88*123 #计算 88*123
10824 #计算器输出结果
#
#
123+65*2-100 #计算 123+65*2-100
153 #计算器输出结果
bc 计算器进位制转换
[root@centos6 ~]# bc
obase=16 #设定输出为 16 进位制
ibase=2 #设定输入为 2 进位制
1111111111111100011010 #输入 2 进位制数
3FFF1A #转换为 16 进位制
二、通过管道运算与进位制转换
这里使用的管道可以简单的理解为将 echo “1+2″ 传送给 bc 计算器
[root@centos6 ~]# echo “1+1” | bc #将 1+1 传送给 bc 计算器
2
[root@centos6 ~]#
[root@centos6 ~]# echo “5*10-1” | bc #将 5*10-1 传送给 bc 计算器
49
双引号、单引号、反单引号的使用
[root@centos6 ~]# echo “123+123” | bc
246
[root@centos6 ~]# echo ‘111+111’
111+111
[root@centos6 ~]# echo ‘111+111′ | bc
222
[root@centos6 ~]# echo `111+111` | bc
-bash: 111+111: command not found
[root@centos6 ~]# echo “`echo 123`+10” | bc
133
三、使用中遇到的问题
先设定 obase 在设定 ibase,计算器正常。
[root@centos6 ~]# bc
bc 1.06.95
Copyright 2006 Free Software Foundation,
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
obase=16
ibase=2
1111111111111100011010
3FFF1A
先设定 ibase 在设定 obase,计算器输出不正常。
[root@centos6 ~]# bc
bc 1.06.95
Copyright 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
ibase=2
obase=16
1111111111111100011010
21220002012002
先设定 obase 在设定 ibase,计算输出正常
修改 obase 后计算输出不正常
[root@centos6 ~]# bc
bc 1.06.95
Copyright 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
obase=16
ibase=2
1111111111111100011010
3FFF1A
obase=10
1111111111111100011010
1111111111111100011010
先设定 obase 在设定 ibase 正常,ibase 与 obase 互换输出不正常。
[root@centos6 ~]# bc
bc 1.06.95
Copyright 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
obase=16
ibase=2
1111111111111100011010
3FFF1A
obase=2
ibase=16
3FFF1A
1011010101
使用管道时同样只能先给 obase 赋值
[root@centos6 ~]# echo “ibase=2;obase=16;11101” | bc
1002
[root@centos6 ~]# echo “obase=16;ibase=2;11101” | bc
1D
结论?????
在 bc 计算器中,obase 与 ibase 的赋值有先后顺序。
且在计算过程中 ibase 与 obase 只能赋值一次。