为通用问题标题道歉,我不知道如何正确表达它(欢迎提出建议!)
我试图了解Common Mark 解析器的一些代码并遇到了这个问题:
/* Oversize the buffer by 50% to guarantee amortized linear time
* complexity on append operations. */
bufsize_t new_size = target_size + target_size / 2;
new_size += 1;
new_size = (new_size + 7) & ~7;
因此,给定一个数字,例如 32,它将添加 (32 / 2) [48],添加 1 [49],添加 7 [56],最后与 -8 [56] 进行与运算。
这是一种常见的模式吗?特别是添加一个数字,然后与它的补码进行与运算。
有没有人能够提供任何关于这是在做什么以及存在哪些优势(如果有的话)的见解?