c++ - 解释下面的C++方法

标签 c++ bit-manipulation

#define XL     33           
#define OR      113          
#define NOR     313     
#define TN     344  

int to_bits(int critn,char *mask)
{
       unsigned int x;
       int begin;

       if (critn < XL)           begin = 1;
       else if (critn < OR)      begin = XL;
       else if (critn < NOR)     begin = OR;
       else if (critn <= TN)    begin = NOR;
       else                        begin = 0;
       x = critn - begin;

       *mask = (char)(0x80 >> (x % 8));

       return (int)(x >> 3);    // fast divide by 8  
}

我对 C++ 代码一无所知。任何人都可以在最后两行中解释此方法的作用吗?

谢谢

最佳答案

最后两行是位移。

掩码采用 0x80 并将其移动(x 到 8 的模数)位置,例如 5 >> 2 将为您提供 1。

x >> 3 就像它所说的那样,将它除以 8,它取 x 并将所有位向右移动 3 个位置(即 1、2、4),结果 8 将变为 1 等。它有点像整数 div,但会更快(如评论所说,快速除以 8)

关于c++ - 解释下面的C++方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562502/

相关文章:

c++ - 构建共享 ParMETIS-4.0.3

c++ - 访问位域中的所有空闲槽

c - 使用位操作减少缓存开销

c++ - 如何在 CUDA 的核函数中将两个 openCV 矩阵相乘?

c++ - 将整数放入队列 <char> C++

c++ - C++ 宏可以在 C++ 文件末尾添加一些代码吗?

c++ - cmake:复制 boost-build 的 "build everything in Jamfile"行为?

c++ - 为什么小于 4 字节的整数类型的位操作会出现异常?

c - 此代码如何反转数字中的位?

c++ - 在 C++ 中使用按位运算符将 4 个字符更改为 int