我正在尝试选择位字符串1010000000001的位[0:2]和位[6:8]位[0:2]是001,位[6:8]是000我试着用以下方法选择这些位:

int instr = 0x1401;
int src2 = (instr & 0x0006); //get bits [2:0]
int src1 = (instr & 0x01C0) >> 6; //get bits [6:8]

printf("%04x, %04x",src2, src1);

但是我得到src1和src2都是0000有人能帮我理解我做错了什么吗?这样我就可以选择位[0:2]和[6:8]?

最佳答案

看看这个代码:

#include <stdio.h>

int main (void) {
    unsigned instr = 0x1401;
    unsigned src2 = instr & 0x0007;        //  7 in hex == 0000 0000 0111 in binary
    unsigned src1 = (instr & 0x01C) >> 6;  // 1C in hex == 0001 1100 0000 in binary

    printf("%04x, %04x", src2, src1);
}

它屏蔽了instr中所需的位,并按正确的偏移量移动它们此外,在进行位操作时,首选无符号类型。

关于c - C中的位选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36781802/

10-11 23:08