我正在尝试选择位字符串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/