我试图选择位[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]吗?
看看这段代码:
#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并将它们移动了正确的偏移量.此外,在进行位操作时,首选无符号类型.