2017-01-06 12 views
-3

私はC++プロジェクトをJavaに移植する作業をしていますが、ビット操作では非常に単純に思えますが、C++ではJavaとは異なる結果になります。以下を考慮する。 Cではビット演算子 - C++とJavaの違い

long xor = 2654435769L; 
xor ^= xor << 0x0B; 

++(正しい)値は637186​​489ですが、Javaでは、それは私がここで何をしないのです5433770815929.

ですか?

+4

Javaでlong型は64ビットですが、C++言語では長いものはコンパイラによって異なりますが、通常は32ビットです。 C++での表現は、11ビット左にシフトされているので、ビットを静かに落としましたが、javaはそうしませんでした。 – davidbak

+6

誰がC++の値が「正しい」と言いますか? 'sizeof(long)'を表示してください。 – chrylis

+1

@davidbak氏によると、Javaの答えは正しいですが、C++の答えは正しくありません。 2654435769 << 11は5436284454912です。2654435769^5436284454912は5433770815929です - http://www.miniwebtool.com/bitwise-calculator/をご覧ください。 – stdunbar

答えて

0

javaのlongデータ型は64ビットです。代わりにintを使用してください。基本的に、C++でlongまたはintがある場合は、Javaの場合はintのみを使用してください。 C++にlong longがある場合は、Javaでlongを使用します。

編集:あなたのタイトルは少し曖昧です。 C++コードをJavaに変換しようとしていることを人々が理解できるように、言い直すべきです。