日期:2014-05-16  浏览次数:20633 次

linux内核中的宏定义不懂
一个main.c下的一个宏定义 把BCD转换成二进制 
#define BCD_TO_BIT(val) ((val) = (val)&15 + (val>>4)*10)
这个我真的看不懂 十进制在C语言还能转换成二进制吗?
很困惑 请各位大师帮帮忙啊
  小弟拜上

------解决方案--------------------
唉 lz去百度下BCD码 
这个宏仅仅是把8bits的bcd码转换成一个整数


------解决方案--------------------
正常的整形能直接运算
BCD码不能直接进行运算

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

那么BCD码直接运算就要自己写函数,不但麻烦,还浪费更多的cpu指令
所以要转BCD码