2012-05-01 16 views
2

可能性の重複に:
What is >>> operation in C++'>>>' JavaのC++

私はC + +へのJavaのこの小さな小さな部分を変換する必要がありますが、何であるかを知りません'>>>' ...は検索されましたが、shiftにのみ参照が見つかりませんでした。 誰にもアイデアはありますか? Cにおける

int x1; 

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

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

*符号なし*右シフト演算子です。私は本当にC++の同等のものが本当にわかりません... – Ryan

答えて

3

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

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

言われていることを、あなたが翻訳しているコードは愚かです。あなたは同じように簡単にそれを翻訳できるよう第2の演算の結果は常に、Javaでゼロになります。

i1++; 
text2[i2++] = 0; 
+0

私はそれが真実ではないと確信しています。キャストはそれが適用された式の "コンテキスト"に魔法の影響を与えません。 – duskwuff

+0

本当に重複した投稿でした、私は謝罪します。 正しい方法は次のとおりです。 text2 [i2 + +] =(char)(符号なしint)(x1 >> 8); または text2 [i2 + +] =(char)((符号なしint)x1 >> 8); –

+0

おっと - 私はシフトの前に無署名に変換していませんでした。謝罪いたします。 –

0

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

unsigned int x1; 

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

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

Cにおいては、上で動作している変数が署名されている場合、シフトオペレータはオーバー符号ビットから1をドラッグし、そうでない場合、それが作用しますjavaの符号なしシフトのように。

0

Javaで>>>オペレータはunsignedタイプのC++で>>オペレータに相当logical shiftです。ゼロを左側の空きビット位置にシフトします。署名タイプにあなたが開始(またはキャスト)から符号なしの型を使用する必要があるので、右シフトが論理的であるかarithmeticか実装定義です:もちろん

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

、このコードはしていないようです多くの意味があります。x10xffでマスクされているため、ゼロ以外の8ビットしか持たないため、8ビット右シフトするとゼロになります。

関連する問題