1

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

 }
4

2 回答 2

1

您需要使用二进制00001111(十进制 15 或十六进制)将其屏蔽掉0x0f

uint8_t reg = 41; // binary 00101001
uint8_t lo_nibble = (reg >> 0) & 0x0f;
uint8_t hi_nibble = (reg >> 4) & 0x0f;
于 2013-10-16T05:25:43.227 回答
0

要形成一个掩码来捕获数字的底部n位,您可以执行以下步骤(首先是笔和纸,最终在您的脑海中):

  • 从值 1 开始。
    (1)// == 1 或 00000001

  • 将值 1上移n位。
    (1<<4)// == 16 或 00010000

  • 减 1。
    (1<<4)-1// == 15 或 00001111

将此掩码与另一个值或变量进行与运算将产生该数字的底部n位。

int in, hi, lo;

lo = in & ((1<<4)-1);
hi = (in>>4) & ((1<<4)-1);
于 2013-10-16T05:42:28.027 回答