[20240531]使用bc计算小问题.txt
--//今天使用bc计算遇到的问题做一个记录.一般情况下配合我的bc_calc_win.vim插件使用.我前面blog有介绍.
A+1 = 11 --//按\cc结果等于11.也就是bc可以自动识别十六进制数字,A表示十进制10,这点我以前没有注意或者不习惯.
B+1 = 12 --//按\cc结果等于11
--//注意16进制数一定要使用大写,另外注意bc不接受大写变量赋值.
A=12;A+1 = (standard_in) 1: parse error --//按\cc报错.
H=12;H+1 = (standard_in) 1: illegal character: H(standard_in) 1: parse error(standard_in) 1: illegal character: H --//按\cc报错.
a=12;a+1 = 13 --//按\cc计算正确.
A+B = 21 --//按\cc计算正确. 相当于10+11=21
0A+B = 21 --//按\cc计算正确.前面有0并不会表示八进制.
0a+b = 21 --//按\hd(或者\dh),我写的插件就比较灵活,自动判断输入进制,转换相反进制(10-->16或者16->10).
0a+b = 0x15 --//按\hh,输入16进制输出16进制.
17+8 = 0x1f --//按\hh,注意这里17,8是16进制数.
0x17+0x8 = 0x1f --//按\hh,注意这里17,8是16进制数.
--//但是如果字符串混合包含1到9数值以及多次出现ABCDEF字符,结果错误.
1A+1 = 20 //按\cc结果20.错误, 正确 26+1 =27 .
1B+1 = 20 //按\cc结果20.错误, 正确 27+1 =28 .
1F+1 = 20 //按\cc结果20.错误.
A1+1 = 92 //按\cc结果92 错误.
--//实际上这样的情况,bc自动将ABCDEF转换为9来计算.也就是仅仅单个字符有效,感觉bc这样设计非常不合理!!
AA+1 = 100 //按\cc结果100.错误.
--//甚至出现2个字符是结果都是错误的.实际上bc将AA转换为99,然后再计算.
--//而使用bc_calc_win.vim插件就没有这个问题
1A+1 = 27 //按\hd
1B+1 = 28 //按\hd
1F+1 = 32 //按\hd
AA+1 = 171 //按\hh
A1+1 = 0xa2 //按\hh
--//总之使用bc最好还是显式说明输入进制ibase,输出进制obase.
--//另外注意输出输入进制顺序.例子:
ibase=16;obase=16;A+B = 21 --//错误
--//因为前面ibase=16表示输入16进制,而接着obase=16 相当于输出16*1+6=22进制,这样输出结果21,实际上22进制数.计算正确,也许不
--//是操作者需要的结果.
obase=16;ibase=16;A+B = 15 --//正确