关于小端和大端的按位非运算符(〜在C中)

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

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

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

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

我所指的运营商是:

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

先感谢您!

更新:到目前为止,在阅读我的回复时,我觉得有必要问一下bitwise not运算符是否会影响signed int上的符号位。 因为我忘了这一切,所以我担心这部分有点困惑。 亚当似乎在说所有的价值都被视为无符号。 是重新应用符号位还是一次签名的值变为无符号?

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

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

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

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