C中的位选择

foo*_*512 1 c binary

我试图选择位[101:00]的位[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);
Run Code Online (Sandbox Code Playgroud)

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

nal*_*zok 5

看看这段代码:

#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);
}
Run Code Online (Sandbox Code Playgroud)

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