This question already has answers here:
Bitwise operation and usage
(16个答案)
3年前关闭。
我正在用C语言编写一个内存管理器,并试图确保其正确对齐(确保用户空间从8整除的地址开始,并确保整个块也被8整除)。
我想知道是否有人可以告诉我这是怎么做的:
这是朋友建议给我的代码片段,但是我不确定在这种情况下它的作用/竖线的功能是什么
编辑:
我意识到我可以更清楚地解释这一点; x是一个整数,我确实查看它是按位或运算符,但是在这种情况下我不明白这是什么意思。谢谢您的帮助!
这应该比朋友的构造更容易理解(BTW可能也可以工作,但请参阅下文)。
您所构造的数字通过将其与数字7进行按位或运算来设置数字的低3位(因此,创建一个数字,除以8时其余数为7),然后加1以将其除以8。-1的含义,您应该自己解决。如果您一眼不理解它的功能,我什至不会看它也不会使用它。
是否建议使用带符号的整数作为地址和块长度,您肯定会得到其他注释。
(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