c中的位掩码和分离

时间:2013-10-16 05:22:13

标签: c numbers separator bitmask

我是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);

 }

2 个答案:

答案 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);