因此,在阅读K& R“The C Programming Language”时,我遇到了这个练习:
问题 :写一个函数setbits(x,p,n,y)返回x,其中n位从位置p开始设置为最右边的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开始?
感谢您的帮助!
答案 0 :(得分:1)
我不明白如何计算位位置,我应该从1还是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) 希望这条消息能够正确传达给你。