【问题标题】:Regarding the binary "bit position" nomenclature关于二进制“位位置”命名法
【发布时间】:2014-04-01 22:10:02
【问题描述】:

所以在阅读 K&R “The C Programming Language”时,我遇到了这个练习:

问题:编写一个函数 setbits(x,p,n,y),返回 x,从位置 p 开始的 n 位设置为最右边的 n 位y,其他位保持不变。

我不明白的是如何计算位位置,我应该从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 开始?

感谢您的帮助!

【问题讨论】:

    标签: c binary bit


    【解决方案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) 希望此消息已正确传达给您。

    【讨论】:

    • >> 运算符确实不会向左移动。 :)
    猜你喜欢
    • 2019-04-16
    • 2020-10-03
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2016-10-31
    • 2018-03-31
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多