-3
私はC++プロジェクトをJavaに移植する作業をしていますが、ビット操作では非常に単純に思えますが、C++ではJavaとは異なる結果になります。以下を考慮する。 Cではビット演算子 - C++とJavaの違い
long xor = 2654435769L;
xor ^= xor << 0x0B;
++(正しい)値は637186489ですが、Javaでは、それは私がここで何をしないのです5433770815929.
ですか?
Javaでlong型は64ビットですが、C++言語では長いものはコンパイラによって異なりますが、通常は32ビットです。 C++での表現は、11ビット左にシフトされているので、ビットを静かに落としましたが、javaはそうしませんでした。 – davidbak
誰がC++の値が「正しい」と言いますか? 'sizeof(long)'を表示してください。 – chrylis
@davidbak氏によると、Javaの答えは正しいですが、C++の答えは正しくありません。 2654435769 << 11は5436284454912です。2654435769^5436284454912は5433770815929です - http://www.miniwebtool.com/bitwise-calculator/をご覧ください。 – stdunbar