重複の可能性:
C++での>>>操作とは
Javaのこの小さな部分をC++に変換する必要がありますが、「>>>」が何であるかわかりません...検索されましたが、参照が見つかりませんでした。シフトのみです。誰かアイデアはありますか?
int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >>> 8);
重複の可能性:
C++での>>>操作とは
Javaのこの小さな部分をC++に変換する必要がありますが、「>>>」が何であるかわかりません...検索されましたが、参照が見つかりませんでした。シフトのみです。誰かアイデアはありますか?
int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >>> 8);
符号なし右シフト(>>>
)は、C ++には必要ないため、存在しません。C++には、符号付き整数型と符号なし整数型があります。右シフトを符号なしにしたい場合は、シフトされている変数を符号なしにします。
unsigned int x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >> 8);
そうは言っても、あなたが翻訳しているコードはばかげています。2番目の操作の結果はJavaでは常にゼロになるため、次のように簡単に変換できます。
i1++;
text2[i2++] = 0;
Cでの同等物は次のようになります。
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (unsigned char)(x1 >> 8)
Cでは、シフト演算子は、操作している変数が符号付きの場合は符号ビットから1をドラッグし、符号なしの場合はJavaの符号なしシフトのように動作します。
>>>
Javaの演算子は、型に対する C++の演算子と同等の論理シフトです。左側の空きビット位置にゼロをシフトします。符号付きの型では、右シフトが論理か算術かは実装定義であるため、最初 (またはキャスト) から符号なしの型を使用する必要があります。>>
unsigned
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = static_cast<char>(x1 >> 8);
もちろん、このコードはあまり意味がないようです — <code>x1 は でマスクされているため、ゼロ以外のビットは 8 つしかないため0xff
、8 ビットだけ右シフトするとゼロになります。