因此,在阅读 K&R“C 编程语言”时,我遇到了这个练习:
问题:编写一个函数 setbits(x,p,n,y),返回 x,并将从位置 p 开始的 n 位设置为y 最右边的 n 位,其他位保持不变。
我不明白的是如何计算位位置,应该从1开始还是从0开始?
例如,考虑到练习,它将是:
与n = 3, p = 4, X= 00100000 //32, Y= 00001011 //11
:
p
n n n
X= 0 0 1 0 0 0 0 0 // Number 32
pos: 8 7 6 5 4 3 2 1
Y= 0 0 0 0 1 0 1 1 // Number 11
n n n
这将导致:
p
n n n
0 0 1 0 0 1 1 0 // Number 38
或者可能是:
p
n n n
X= 0 0 1 0 0 0 0 0 // Number 32
pos: 7 6 5 4 3 2 1 0
Y= 0 0 0 0 1 0 1 1 // Number 11
n n n
这将导致:
p
n n n
0 0 1 0 1 1 0 0 // Number 44
所以我的问题是:计算位位置的最常见方法是什么?应该从0开始还是从1开始?
感谢您的帮助!
最佳答案
What I don't understand is how to count the bit position, should I start from 1 or 0?
位计数始终从 0 开始
示例:
unsigned int x = 8;
unsigned int y = x >> 0; // Here you are saying shift x by 0 bit times
printf("%d: \n", y);
y = x >> 1; // Here you are saying shift x by 1 bit position to left...
printf("%d: \n", y);
你知道左移 1 次意味着除以 2。如果你左移 0 次意味着除以 1(2 次幂 0) 希望此消息已正确传达给您。
关于c - 关于二进制 "bit position"命名法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22787086/