[20240531]使用bc计算小问题.txt

2024年 6月 5日 73.7k 0

[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  --//正确

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论