2012-05-01 91 views
2

可能重複:
What is >>> operation in C++'>>>' 的Java和C++

我需要的Java這小小的一部分轉換爲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); 

話雖這麼說,你翻譯的代碼是愚蠢的。第二操作的結果將始終是在Java中零,所以你可以很容易地將其翻譯成:

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

我很確定這不是真的:演員不會神奇地影響它應用到的表達式的「上下文」。 – duskwuff

+0

這確實是一個重複的帖子,我的歉意。 正確的方法是: text2 [i2 ++] =(char)(unsigned int)(x1 >> 8); text2 [i2 ++] =(char)((unsigned int)x1 >> 8); –

+0

糟糕 - 我錯過了轉換之前的轉換無符號。我很抱歉。 –

0

在C中的等效將是:

unsigned int x1; 

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

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

在C的移位操作者將從符號位上拖動1如果它是在操作可變已簽名,如果不是將作用像java無符號移位。

0

>>>運營商在Java是一種logical shift等價於C++的>>操作上unsigned類型。它將零移到左邊的空位位置。在簽約類型,它是實現定義右移是邏輯或arithmetic,所以你需要從一開始(或CAST)使用無符號類型:

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

當然,這段代碼似乎並沒有很有意義 - x1只有8個非零位,因爲它被掩碼爲0xff,因此右移8位將導致零。