【发布时间】:2010-11-05 09:18:47
【问题描述】:
这与家庭作业有关,但这不是家庭作业。
当在大端机器和小端机器上编译时,我很难理解按位非(C 中的~)会如何影响signed int 和unsigned int。
字节真的“向后”吗?如果是,按位不(和其他运算符)是否会根据机器类型产生不同的结果ints?
当我们这样做时,C 中的每个位运算符的答案是否相同,还是严重依赖?
我指的运算符是:
~ /* bitwise Not */
& /* bitwise And */
| /* bitwise Or */
^ /* bitwise Exclusive-Or */
提前感谢您!
更新:到目前为止,在阅读我的回复时,我不得不询问按位非运算符是否会影响 signed int 上的符号位。恐怕我在这部分有点困惑,因为我忘记了所有的寂静。 Adam 似乎在声明所有值都被视为无符号。是重新应用符号位还是曾经签名的值变为无符号?
【问题讨论】:
-
您列出的运算符是按位运算符,而不是逻辑运算符。 C中的逻辑运算是&&, ||和!。
-
按位非运算符确实会影响符号位。但该值不会“变成”无符号。如您所料,〜在有符号整数类型上的结果是,无论有符号值具有通过翻转输入的每一位来计算的位模式。所以负值的~总是非负的,非负值的~总是负的。
标签: c bitwise-operators endianness