Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于小端和大端的按位Not运算符(~在C中)_C_Bitwise Operators_Endianness - Fatal编程技术网

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

关于小端和大端的按位Not运算符(~在C中),c,bitwise-operators,endianness,C,Bitwise Operators,Endianness,这与家庭作业有关,但不是家庭作业 我很难理解当在大端机器和小端机器上编译时,按位not(~在C中)对有符号整数和无符号整数有何影响 字节真的是“向后”的吗?如果是,按位not(和其他运算符)是否会根据机器类型产生不同的结果ints 当我们这样做的时候,C中的每一个位运算符的答案是相同的还是在很大程度上取决于它 我指的运营商是: ~ /* bitwise Not */ & /* bitwise And */ | /* bitwise Or */ ^ /* bitwise Exclu

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

我很难理解当在大端机器和小端机器上编译时,按位not(
~
在C中)对
有符号整数
无符号整数
有何影响

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

当我们这样做的时候,C中的每一个位运算符的答案是相同的还是在很大程度上取决于它

我指的运营商是:

~  /* bitwise Not */
&  /* bitwise And */
|  /* bitwise Or */
^  /* bitwise Exclusive-Or */
提前谢谢你


更新:在阅读到目前为止我的回答时,我不得不问,按位not运算符是否会影响
有符号int
上的符号位。恐怕我在这方面有点困惑,因为我忘记了所有的寂静。Adam似乎在声明所有值都被视为无符号。符号位是重新应用的还是曾经有符号的值变为无符号的?

在大端和小端机器中,按位运算符和逻辑运算符的操作完全相同。同样,它们也对有符号和无符号数据进行相同的运算符:结果就像所有数据都是无符号的一样。因此,如果
x
y
是有符号整数,那么
~x
等于
(int)((((无符号int)x)
x&y
等于
(无符号int)x和((无符号int)y)
,等等。正如@Adam的回答所说,由于这些操作符是逐位进行的,所以字节顺序并不重要!例如,
(~x)==(-x-1)
对于每一个有符号的
整数
x
,不管x的长度(以字节为单位),也不管机器的结尾(只要它使用二补运算——还有没有剩余的运算?)

逻辑运算符只关心它们的参数是否为零,而不关心这些值在内存中的实际表示方式。因此,对于逻辑运算,endianness并不重要


按位运算符始终作用于其参数的所有位,并且它们分别对不同的位位置产生影响(结果中的位#5仅取决于输入中的位#5)。他们不关心位的存储顺序,也不关心某些位对数据类型是否有特殊意义,他们只是处理所有位。因此,这里的endianness也不重要,因为所有位都会受到影响,而不管它们的顺序如何。

对,endianness并不重要,直到您开始对数据的各个字节进行寻址为止通过指针算术/寻址游戏生成的整数。同时,仅供参考,列出的运算符不受符号影响,但右移运算符
>
可以。因此,~54321将始终导致703710?不,位将相同,但数值的解释将不同。对于带符号的两个s-补码整数,~n=-n-1.~4321=-4322您列出的运算符是按位运算符,而不是逻辑运算符。C中的逻辑运算是&、|和!。按位not运算符不会影响符号位。但值不会“变成”无符号。有符号整数类型上的~的结果是,正如您所期望的,任何有符号值都具有位模式,该位模式是通过翻转输入的每一位来计算的。因此,负值的~始终是非负的,而非负值的~始终是负的。是的,我要指出的是,依赖性取决于两位补运算(据我所知,在[human;-)]一代或更久的时间里,它在CPU中几乎是通用的),而不是持久性。