c - 关于二进制 "bit position"命名法

标签 c binary bit

因此,在阅读 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/

相关文章:

c - C语言中使用栈进行2个大数的加法

PHP:带符号的二进制字符串

powershell - 在 PowerShell 管道上输出二进制数据

algorithm - 这个算法有名字吗? (我一直称它为 changeBinary)

c# - 面试失败 : And I thought Google was tough

c++ - 从缓冲区输入的位

c - 如何使用 OpenCL 将内存从 CPU 并行传输到 GPU?

c++ - 更改过滤器时 GetOpenFileName() 不刷新

c - C中的二进制搜索树程序表现异常

c# - 将 BCD 码转换为二进制码的最有效方法