按位运算符(~
、&
和)对其提升的操作数的按位表示进行运算|
。^
这样的操作会导致未定义的行为吗?
例如,~
运算符在 C 标准中是这样定义的:
6.5.3.3 一元算术运算符
运算符的结果
~
是其(提升的)操作数的按位补码(即,当且仅当未设置转换操作数中的相应位时,结果中的每个位都被设置)。整数提升在操作数上执行,结果具有提升的类型。如果提升的类型是无符号类型,则表达式~E
等效于该类型中可表示的最大值 minusE
。
在所有架构上,~0
生成符号位设置为1
且所有值位设置为的位模式1
。在一个补码架构上,这种表示对应于一个负零。这个位模式可以是陷阱表示吗?
对于更常见的架构,是否还有其他涉及简单位运算符的未定义行为示例?