关于二进制“位位置”的命名法

时间:2014-04-01 13:16:52

标签: c binary bit

因此,在阅读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开始?

感谢您的帮助!

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) 希望这条消息能够正确传达给你。