4

これは宿題に関連していますが、これは宿題ではありません。

~ビット単位の not ( C) がどのように影響するか、ビッグ エンディアン マシンとリトル エンディアン マシンでコンパイルした場合signed intに違いがあるかどうかを理解するのは困難です。unsigned int

バイトは本当に「後方」ですか?そうであれば、ビットごとの not (および他の演算子)によりint、マシンの種類に応じて異なる結果が生成されますか?

私たちがそれに取り組んでいる間、答えは C のビットごとの演算子のそれぞれについて同じですか、それとも大きく依存していますか?

私が言及している演算子は次のとおりです。

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

前もって感謝します!

更新:これまでの回答を読んで、ビット単位の not 演算子が a の符号ビットに影響するかどうかを尋ねざるを得ないと感じましたsigned int。残念ながら、私はその静けさをすべて忘れていたので、この部分で少し混乱していました. Adam は、すべての値が符号なしとして扱われると述べているようです。符号ビットが再適用されるか、または一度符号化された値が符号なしになりますか?

4

3 に答える 3

7

The bitwise operators and logical operators all operate identically in big- and little-endian machines. Likewise, they also operator identically on signed and unsigned data: the result is as if everything were unsigned. So, if x and y are signed integers, then ~x equals (int)(~((unsigned int)x) and x & y equals (int)(((unsigned int)x) & ((unsigned int)y), and so on for all of the other operators.

于 2009-06-24T02:26:36.100 に答える
2

@Adamの答えが言うように、これらの演算子はビットごとに実行されるため、バイトオーダーはあまり重要ではありません! たとえば、(~x) == (-x-1)すべてのsignedinteger に対してx、 x の長さ (バイト単位) に関係なく、マシンのエンディアンに関係なく (2 の補数演算を使用している限り、そうでないものは残っていますか?-)

于 2009-06-24T02:36:27.877 に答える
1

論理演算子は、引数がゼロかどうかだけを気にし、これらの値が実際にメモリ内でどのように表現されるかは気にしません。したがって、論理演算のエンディアンは重要ではありません。

ビット単位の演算子は常に引数のすべてのビットに作用し、異なるビット位置に個別に影響します (結果のビット #5 は、入力のビット #5 に依存します)。ビットが格納される順序は気にしません。または、一部のビットがデータ型に対して特別な意味を持つ場合は、それらすべてを処理するだけです。したがって、ここでは、順序に関係なくすべてのビットが影響を受けるため、エンディアンも重要ではありません。

于 2009-06-25T00:16:54.150 に答える