chq*_*lie 14 c c++ bitwise-operators language-lawyer ones-complement
位运算符(~
,&
,|
和^
)在他们的推动数的按位表示操作.这样的操作会导致不确定的行为吗?
例如,~
运算符在C标准中以这种方式定义:
6.5.3.3一元算术运算符
~
运算符的结果是其(提升的)操作数的按位补码(也就是说,当且仅当未设置转换的操作数中的相应位时,才会设置结果中的每个位).整数提升在操作数上执行,结果具有提升类型.如果提升的类型是无符号类型,则表达式~E
等效于该类型中可表示的最大值减去E
.
在所有体系结构上,~0
生成一个位模式,其符号位设置为1
,所有值位设置为1
.在一个补码架构上,该表示对应于负零.这个位模式可以成为陷阱表示吗?
是否存在涉及更常见架构的简单位运算符的未定义行为的其他示例?
Ant*_*ala 10
对于一个补码系统,明确列出了那些不支持有符号整数的负零的陷阱值的可能性(C11 6.2.6.2p4):
如果实现不支持负零,则具有将产生此类值的操作数的&,|,^,〜,<<和>>运算符的行为是未定义的.
然后,一个人的补充系统并不完全相同; 例如GCC不支持任何!
C11确实意味着只允许实现定义和未定义的方面用于签名类型(C11 6.5p4).
归档时间: |
|
查看次数: |
851 次 |
最近记录: |