请教BCD码转为十进制的问题

mania001 2010-01-07 07:51:26
8421组合BCD码,想转为十进制
dim a as byte =&h18 (十位为1 ,个位为8)
程序写法:
十位 个位
dim b as integer = ((a And &HF0) /16 )*10 + a And &HF

msgbox((((a And &HF0) /16 )*10).Tostring ) 得出结果为 1
msgbox((( a And &HF).Tostring ) 得出结果为8
msgbox(b.tostring) 得出结果为2


当我把代码改成
十位 个位
dim b as integer = CByte(((a And &HF0) /16 )*10) +CByte( a And &HF)
msgbox((((a And &HF0) /16 )*10).Tostring ) 得出结果为 1
msgbox((( a And &HF).Tostring ) 得出结果为8
msgbox(b.tostring) 得出结果为18


只要我的个位小于等于5, 我用
dim b as integer = ((a And &HF0) /16 )*10 + a And &HF
可以得到正确的十进制值,大于16后就会有问题,


请个位大大帮忙分析一下为什么会这样?
...全文
310 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mania001 2010-01-08
  • 打赏
  • 举报
回复
检查过了。晕死,犯这种错误。谢谢指点。放分
kuhura 2010-01-07
  • 打赏
  • 举报
回复
第一部分,是因为先执行了加法,所以得出结果为2,请仔细检查运算符的优先级。
dim b as integer = ((a And &HF0) /16 )*10 + a And &HF 等同于
dim b as integer = (((a And &HF0) /16 )*10 + a) And &HF


mania001 2010-01-07
  • 打赏
  • 举报
回复
刚做的测试:
dim a as byte =&h18 (十位为1 ,个位为8)
dim b as byte= ((a And &HF0) /16 )*10
dim c as byte = a And &HF
dim d as byte =b+c
msgbox((((a And &HF0) /16 )*10).Tostring ) 得出结果为 10
msgbox((( a And &HF).Tostring ) 得出结果为8
msgbox(d.tostring) 得出结果为18

为什么分开写可以,写在一行不行呢?
mania001 2010-01-07
  • 打赏
  • 举报
回复
不好意思,写错了 更正代码
msgbox((((a And &HF0) /16 )*10).Tostring ) 得出结果为 10

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧