This question already has answers here:
Bitwise operation and usage
                                
                                    (16个答案)
                                
                        
                                3年前关闭。
            
                    
我正在用C语言编写一个内存管理器,并试图确保其正确对齐(确保用户空间从8整除的地址开始,并确保整个块也被8整除)。

我想知道是否有人可以告诉我这是怎么做的:

x = ((x - 1) | 7) + 1;


这是朋友建议给我的代码片段,但是我不确定在这种情况下它的作用/竖线的功能是什么

编辑:
我意识到我可以更清楚地解释这一点; x是一个整数,我确实查看它是按位或运算符,但是在这种情况下我不明白这是什么意思。谢谢您的帮助!

最佳答案

将数字除以8的标准方法是:

len = (len + 7) & 0xfffffff8; /* for positive 32-bit values */


这应该比朋友的构造更容易理解(BTW可能也可以工作,但请参阅下文)。

您所构造的数字通过将其与数字7进行按位或运算来设置数字的低3位(因此,创建一个数字,除以8时其余数为7),然后加1以将其除以8。-1的含义,您应该自己解决。如果您一眼不理解它的功能,我什至不会看它也不会使用它。

是否建议使用带符号的整数作为地址和块长度,您肯定会得到其他注释。

关于c - 按位或运算符| C语言中用于对齐内存块的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36097673/

10-11 22:08