3

重複の可能性:
C++での>>>操作とは

Javaのこの小さな部分をC++に変換する必要がありますが、「>>>」が何であるかわかりません...検索されましたが、参照が見つかりませんでした。シフトのみです。誰かアイデアはありますか?

int x1;

x1 = text1[i1++] & 0xff;

text2[i2++] = (char) (x1 >>> 8); 
4

3 に答える 3

4

符号なし右シフト(>>>)は、C ++には必要ないため、存在しません。C++には、符号付き整数型と符号なし整数型があります。右シフトを符号なしにしたい場合は、シフトされている変数を符号なしにします。

unsigned int x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >> 8);

そうは言っても、あなたが翻訳しているコードはばかげています。2番目の操作の結果はJavaでは常にゼロになるため、次のように簡単に変換できます。

i1++;
text2[i2++] = 0;
于 2012-05-01T23:39:04.103 に答える
0

Cでの同等物は次のようになります。

unsigned int x1;

x1 = text1[i1++] & 0xff;

text2[i2++] = (unsigned char)(x1 >> 8)

Cでは、シフト演算子は、操作している変数が符号付きの場合は符号ビットから1をドラッグし、符号なしの場合はJavaの符号なしシフトのように動作します。

于 2012-05-01T23:38:39.997 に答える
0

>>>Javaの演算子は、型に対する C++の演算子と同等の論理シフトです。左側の空きビット位置にゼロをシフトします。符号付きの型では、右シフトが論理か算術かは実装定義であるため、最初 (またはキャスト) から符号なしの型を使用する必要があります。>>unsigned

unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = static_cast<char>(x1 >> 8);

もちろん、このコードはあまり意味がないようです — <code>x1 は でマスクされているため、ゼロ以外のビットは 8 つしかないため0xff、8 ビットだけ右シフトするとゼロになります。

于 2012-05-01T23:44:08.437 に答える