这与家庭作业有关,但这不是家庭作业。

我很难理解在大端机器和小端机器上编译时,如果按位(~在C中)不会影响signed intunsigned int,会有什么不同。

字节是否真的 <!>“;向后<!>”;如果是,那么按位(和其他运算符)会导致根据机器类型生成不同的结果int

虽然我们在这里,对于C中的每个按位运算符,答案是否相同,或者它是否依赖于它?

我所指的运营商是:

~  /* bitwise Not */
&  /* bitwise And */
|  /* bitwise Or */
^  /* bitwise Exclusive-Or */

提前谢谢你!

更新:到目前为止,在阅读我的回复时,我觉得有必要询问按位非运算符是否会影响<=>上的符号位。因为我忘记了所有那些狡猾的事情,所以我担心我在这方面有点困惑。亚当似乎在说所有的价值都被视为无符号。重新应用符号位还是一次签名的值变为无符号?

有帮助吗?

解决方案

按位运算符和逻辑运算符在大端和小端机器中的运行方式相同。同样,它们也在有符号和无符号数据上运行相同:结果就好像所有内容都是无符号的一样。因此,如果xy是有符号整数,则~x等于(int)(~((unsigned int)x)x & y等于(int)(((unsigned int)x) & ((unsigned int)y),等等所有其他运算符。

其他提示

正如@ Adam的回答所说,由于这些运算符逐位运行,字节顺序并不重要!例如,(~x) == (-x-1)对于每个signed整数x,无论x的长度是多少,并且无论机器的字节顺序如何(只要它使用二进制补码算法 - 是否还有剩下的那个''吨 - ?)

逻辑运算符只关心它们的参数是否为零,它们并不关心这些值是如何在内存中实际表示的。因此对于逻辑运算而言,字节顺序并不重要。

按位运算符总是作用于其参数的所有位,它们分别对不同的位位置产生影响(结果中的位#5仅取决于输入中的位#5)。它们不关心存储位的顺序,或者如果某些位可能对数据类型有特殊含义,它们只处理所有这些位。所以这里的字节顺序也无所谓,因为只要所有位都受到影响,无论它们的顺序如何。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top