注册 登录
编程论坛 C语言论坛

请教怎么制定位开始位移

baobao125 发布于 2021-08-22 10:06, 2005 次点击
   


0001 0000

我想从第5位的1开始往右移,请问怎么指定从该位开始位移,
6 回复
#2
自由而无用2021-08-22 13:14
//online parser: https://www.bccn.net/run/
#include <stdio.h>

typedef unsigned char reg;

#define BIT_MASK4  (reg)0xEF
#define BIT_CLR567  (reg)0x1F
#define BIT_SET567(_r)  (reg)(_r & 0xE0)
#define BIT_MASK4SR(_r, _c)  (reg)((_r & BIT_CLR567) >> _c)
#define BIT_BAOBAO(_r, _c)  (reg)(BIT_SET567(_r) | BIT_MASK4SR(_r, _c))

#define FR_FLAG
#define BIT4  (reg)(1 << 2)
#define BIT_CLRX(_idx)  (reg)(0xFF >> (_idx - 1))
#define BIT_SETX(_r, _idx)  (reg)(_r & (0xFF << (_idx + 1)))
#define BIT_MASKXSR(_r, _idx, _c)  (reg)((_r & BIT_CLRX(_idx)) >> _c)
#define BIT_FR(_r, _idx, _c)  (reg)(BIT_SETX(_r,_idx) | BIT_MASKXSR(_r, _idx, _c))

int main(int argc, char *argv[])
{
    reg r, *vreg = (char *)main;

    for (int i = 0; i < 125; i++) {
       r = vreg[i];
#ifndef FR_FLAG
       printf("%02d: r = 0x%x, r(%d) = 0x%x\n",
       (i + 1), r, 2, BIT_BAOBAO(r, 2));
#else
       printf("%02d: r = 0x%x, r(%d) = 0x%x\n",
       (i + 1), r, 2, BIT_FR(r, BIT4, 2));
#endif
    }
   
    return 0;
}

[此贴子已经被作者于2021-8-22 14:23编辑过]

#3
吹水佬2021-08-22 17:32
从第5位起右移1位
    unsigned char a=0x95;  //10010101
    printf("%.2x",(a&0xE0)|((a&0x1F)>>1)); //0x8A  ‭10001010
#4
我善治鬼2021-08-22 18:22
你想要的结果
程序代码:


#include <stdio.h>

int main()
{
    unsigned char a = 1 << 4;
    printf("%u", a >> 1);
    return 0;
}




[此贴子已经被作者于2021-8-22 18:24编辑过]

#5
llsh772021-08-22 19:30
回复 3楼 吹水佬
学到了
#6
s484065032021-08-24 08:21
学到了
#7
l33920665302022-10-29 13:57
学到了
1