linux内核中的宏定义不懂

jdwq33 2012-09-28 07:00:11
一个main.c下的一个宏定义 把BCD转换成二进制
#define BCD_TO_BIT(val) ((val) = (val)&15 + (val>>4)*10)
这个我真的看不懂 十进制在C语言还能转换成二进制吗?
很困惑 请各位大师帮帮忙啊
小弟拜上
...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdwq33 2012-09-29
  • 打赏
  • 举报
回复
哦 是这样的啊 呵呵 谢谢了
deep_pro 2012-09-29
  • 打赏
  • 举报
回复
正常的整形能直接运算
BCD码不能直接进行运算

例如60这个10十进制数
BCD码是0x60 ,整形是0x3c
如果0x60 直接相加,0x60+0x60=0xc0=192 ,不是正确的120

那么BCD码直接运算就要自己写函数,不但麻烦,还浪费更多的cpu指令
所以要转BCD码
jdwq33 2012-09-29
  • 打赏
  • 举报
回复
我知道BCD码,他不就是整数吗?为什么还要转换呢?在内存中存储不都是以二进制存储的吗?
很不理解他为什么要定义这个宏!!
deep_pro 2012-09-28
  • 打赏
  • 举报
回复
唉 lz去百度下BCD码
这个宏仅仅是把8bits的bcd码转换成一个整数

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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