私はC + +へのJavaのこの小さな小さな部分を変換する必要がありますが、何であるかを知りません'>>>' ...は検索されましたが、shiftにのみ参照が見つかりませんでした。 誰にもアイデアはありますか? Cにおける
int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >>> 8);
私はC + +へのJavaのこの小さな小さな部分を変換する必要がありますが、何であるかを知りません'>>>' ...は検索されましたが、shiftにのみ参照が見つかりませんでした。 誰にもアイデアはありますか? 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;
私はそれが真実ではないと確信しています。キャストはそれが適用された式の "コンテキスト"に魔法の影響を与えません。 – duskwuff
本当に重複した投稿でした、私は謝罪します。 正しい方法は次のとおりです。 text2 [i2 + +] =(char)(符号なしint)(x1 >> 8); または text2 [i2 + +] =(char)((符号なしint)x1 >> 8); –
おっと - 私はシフトの前に無署名に変換していませんでした。謝罪いたします。 –
同等物は次のようになります
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (unsigned char)(x1 >> 8)
Cにおいては、上で動作している変数が署名されている場合、シフトオペレータはオーバー符号ビットから1をドラッグし、そうでない場合、それが作用しますjavaの符号なしシフトのように。
Javaで>>>
オペレータはunsigned
タイプのC++で>>
オペレータに相当logical shiftです。ゼロを左側の空きビット位置にシフトします。署名タイプにあなたが開始(またはキャスト)から符号なしの型を使用する必要があるので、右シフトが論理的であるかarithmeticか実装定義です:もちろん
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = static_cast<char>(x1 >> 8);
、このコードはしていないようです多くの意味があります。x1
は0xff
でマスクされているため、ゼロ以外の8ビットしか持たないため、8ビット右シフトするとゼロになります。
*符号なし*右シフト演算子です。私は本当にC++の同等のものが本当にわかりません... – Ryan