gpt4 book ai didi

c - 是否定义了有符号整数的按位运算结果?

转载 作者:IT老高 更新时间:2023-10-28 14:00:27 25 4
gpt4 key购买 nike

我知道 >> 在有符号整数上的行为可能取决于实现(特别是当左操作数为负数时)。

其他的呢:~, >>, &, ^, |?当它们的操作数是内置类型(shortintlonglong long)的有符号整数时,结果是否保证与它们​​的类型是无符号的一样(就位内容而言)?

最佳答案

对于负操作数,<<具有未定义的行为和 >> 的结果是实现定义的(通常作为“算术”右移)。 <<>>在概念上不是按位运算符。它们是算术运算符,相当于对其定义明确的操作数乘以适当的 2 次幂。

至于真正的位运算符^ , ~ , | , 和 & ,它们对操作数(可能提升的)类型中值的位表示进行操作。他们的结果对于有符号表示的每种可能选择(二进制补码、一个补码或符号幅度)都是明确定义的,但在后两种情况下,如果实现处理“负零”,则结果可能是陷阱表示表示为陷阱。就个人而言,我几乎总是将无符号表达式与位运算符一起使用,这样结果就可以 100% 明确地以 values 而不是 representations 的形式定义。

最后,请注意,所写的这个答案可能仅适用于 C。C 和 C++ 是非常不同的语言,虽然我不太了解 C++,但我知道它在某些领域可能与 C 不同...

关于c - 是否定义了有符号整数的按位运算结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11644362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com