我是c编程的新手,我在位操作方面需要帮助。 我想将数字与已在BCD中编码的寄存器分开。 例如;
寄存器得到'29'作为值,两位将表示2 = '10',四位将表示9 ='1001'。 它是一个8位寄存器,其余位为零。 因此,移出4位将使我处置2。但是如何获得单位数字呢? 我需要一些帮助 我在这里发布代码:
#include<stdio.h>
main()
{
int x,y;
y=0x29;
x=y;
x=x>>4;
x=x*10;
printf("%d",x);
return(0);
}
答案 0 :(得分:1)
你需要用二进制00001111
来掩盖它,它是十进制15或十六进制0x0f
。
uint8_t reg = 41; // binary 00101001
uint8_t lo_nibble = (reg >> 0) & 0x0f;
uint8_t hi_nibble = (reg >> 4) & 0x0f;
答案 1 :(得分:0)
要形成一个掩码以捕获数字的底部 n 位,您可以执行这些步骤(首先是笔和纸,最终在您的头脑中):
从值1开始
(1)
// == 1或00000001
将值 n 移位 n 位。
(1<<4)
// == 16或00010000
减去1.
(1<<4)-1
// == 15或00001111
使用另一个值或变量对此掩码进行AND运算将产生该数字的底部 n 位。
int in, hi, lo;
lo = in & ((1<<4)-1);
hi = (in>>4) & ((1<<4)-1);