C语言中`&-`组合符号的含义及用法是什么?
C语言中
&-符号含义解答 C标准语法中不存在&-这个独立运算符,你看到的写法是两个运算符省略空格后挨在一起形成的,本质是按位与运算符& + 负号运算符-。
给出的代码片段解析
limit= address+ (n &- sizeof(uint)); 实际等效于 limit = address + (n & (-sizeof(uint))),这是内存对齐场景的常用写法,作用逻辑如下:
- 首先
sizeof(uint)是unsigned int类型占用的字节数,32位/64位常规系统下通常为4 - 负数在二进制补码规则下,
-sizeof(uint)的值对应二进制末位会有log2(sizeof(uint))个连续的0,比如sizeof(uint)=4时,-4的二进制为0xFFFFFFFC,末2位都是0 - 按位与操作
n & -sizeof(uint)会把n的末几位清零,得到小于等于n的最大的sizeof(uint)的整数倍,完成数值的向下对齐操作
举个实际计算示例:如果n=7,sizeof(uint)=4,那么7 & -4 = 4,刚好是小于等于7的最大4的倍数。
注意事项
这种省略空格和括号的写法可读性极差,非常不推荐在实际编码中使用。如果要表达相同逻辑,建议添加括号和空格明确运算优先级,避免后续维护时出现歧义。
内容的提问来源于stack exchange,提问作者Adil.Kolenko
相关产品推荐
相关产品推荐

