当前位置: 技术问答>linux和unix
linux内核中的宏定义不懂
来源: 互联网 发布时间:2017-03-16
本文导语: 一个main.c下的一个宏定义 把BCD转换成二进制 #define BCD_TO_BIT(val) ((val) = (val)&15 + (val>>4)*10) 这个我真的看不懂 十进制在C语言还能转换成二进制吗? 很困惑 请各位大师帮帮忙啊 ...
一个main.c下的一个宏定义 把BCD转换成二进制
#define BCD_TO_BIT(val) ((val) = (val)&15 + (val>>4)*10)
这个我真的看不懂 十进制在C语言还能转换成二进制吗?
很困惑 请各位大师帮帮忙啊
小弟拜上
#define BCD_TO_BIT(val) ((val) = (val)&15 + (val>>4)*10)
这个我真的看不懂 十进制在C语言还能转换成二进制吗?
很困惑 请各位大师帮帮忙啊
小弟拜上
|
正常的整形能直接运算
BCD码不能直接进行运算
例如60这个10十进制数
BCD码是0x60 ,整形是0x3c
如果0x60 直接相加,0x60+0x60=0xc0=192 ,不是正确的120
那么BCD码直接运算就要自己写函数,不但麻烦,还浪费更多的cpu指令
所以要转BCD码
BCD码不能直接进行运算
例如60这个10十进制数
BCD码是0x60 ,整形是0x3c
如果0x60 直接相加,0x60+0x60=0xc0=192 ,不是正确的120
那么BCD码直接运算就要自己写函数,不但麻烦,还浪费更多的cpu指令
所以要转BCD码
|
唉 lz去百度下BCD码
这个宏仅仅是把8bits的bcd码转换成一个整数
这个宏仅仅是把8bits的bcd码转换成一个整数