【发布时间】:2020-05-26 23:34:29
【问题描述】:
我最近不得不在 c 中使用 sbrk() 函数 我必须计算我将用于在内存中分配空间的大小。 经过一番研究,我发现了这行代码:
size_t calc_size = ((size) + ((4096) - 1)) & ~((4096) - 1);
尽管我搜索了理解运算符“~”和“&”的含义,但我在 c 中的水平很平均,但我找不到明确的解释,确切地说是 ~ 运算符。您能帮我了解正在执行的操作吗?
【问题讨论】:
-
至于代码本身的作用,基本上是四舍五入到最近的4K边界。 (4096 是 2¹²,这意味着它是一个 1 后跟 12 个二进制零,所以 4096-1 是一个有 12 个二进制 1 的数字。它的补码
~是相反的,所以用它与&进行与运算得到 12结果的最低位为零。预先加法使其向上而不是向下舍入。)
标签: c