【发布时间】:2020-10-06 00:12:52
【问题描述】:
我正在用 C 语言编写一个程序来获取无符号数的前 4 位。我不知道为什么,但是每次我为该无符号数字的参数(该参数也称为“数字”)输入一个十六进制值时,它返回的结果为 0。我在 main 中包含了一个十六进制值,即假设返回 9——因为二进制的前四位是 1001——来说明这一点。我做错了什么导致按位运算符不工作?
unsigned int returnedBits(unsigned int number, int bits, int startingPos) {
int theNumberShifted = (number >> (startingPos));
int theNumberOfBits = ((1 << bits) - 1);
return theNumberOfBits & theNumberShifted;
}
// Driver code
int main()
{
int unsigned number = 0x1264c000, k = 4, p = 0;
printf("The extracted number is %d",
returnedBits(number, k, p));
return 0;
}
【问题讨论】:
-
你期待什么?
-
我希望它返回“9”。我认为所有按位运算都是以二进制完成的,所以前 4 位应该是原始十六进制数 0x1264c000 的“1001”
-
你知道字节序吗?
-
@Ôrel endianess 在这里无关紧要,这些都是逻辑操作,它们的行为都相同
-
好的,我认为这里的混淆是您所说的“前”四位“。您似乎是指第一个非零最高有效位。在您的情况下,这是 101 = 9。这是一个更棘手的问题。您所拥有的是读取四个最低有效位的代码。顺便说一句,与十六进制或十进制无关
标签: c