2

C++コードをJavaに変換する必要があります。気になる問題が2つあります。

1)「unsignedint」のC++からJavaへの「long」としての変換。私はストレージ容量を増やすために長い間使用することを選択します。

2)ビット演算子の使用、具体的には| および<<。unsigned int値をlongに変換したとすると、これはこれらの演算子に悪影響を及ぼしますか?たとえば、C ++の場合:

unsigned int a;
unsigned int b;
unsigned int c;

a | (b<<c)

Javaでこれを実行しても大丈夫ですか?

long a, b, c;

a | (b<<c)

私がこれらのことをするのに遭遇するかもしれないとあなたが思うどんな問題についても私に知らせてください。

ありがとう

4

4 に答える 4

2

longJavaで署名されています。

longデータ型は、64ビットの符号付き2の補数整数です。最小値は-9,223,372,036,854,775,808、最大値は9,223,372,036,854,775,807(両端を含む)です。

unsigned intC ++からの長さは1ワードです(32ビットマシンでは32ビット)。範囲は0〜4,294,967,295です。

于 2013-01-11T18:51:14.763 に答える
2

動作するはずです。longJavaは64ビットであることを忘れないでください。唯一の本当の違いは、Java整数が署名されていることです。

演算子は+、 unsigned-の場合と同じように動作する必要があります :、、、、、、、==&|^<<

これらは動作を変更し ます:*、、、/%<

>>>の代わりに使用して、 (プッシュされたビットはMSBコピーではなく)>>の符号なし解釈を行います。/2**k0

于 2013-01-11T18:52:45.010 に答える
1
       Bitwise operations

  It's important to remember that the unsigned keyword affects 
  the interpretation, not the representation of a number. In other 
  words, in cases where we aren't interpreting a value arithmetically— so-called
  bitwise operations such as AND, OR, XOR— it makes essentially no 
  difference whether a value is marked as "signed" or "unsigned"

。unsigned intは、Javaのlongと同等です。だから、それは違いを生む。詳細については、こちらを参照してください

于 2013-01-11T18:20:34.593 に答える
1

私はあなたがすることは安全であり、Javaでうまくいくはずだと信じています。示されているように使用されるビット演算は、期待どおりに機能するはずです。

于 2013-01-11T18:41:10.757 に答える