我需要的Java這小小的一部分轉換爲C + +,但不知道是什麼'>>>'...搜查,但沒有找到任何參考資料,只能在班次中找到。 有沒有人有任何想法?
int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >>> 8);
我需要的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);
話雖這麼說,你翻譯的代碼是愚蠢的。第二操作的結果將始終是在Java中零,所以你可以很容易地將其翻譯成:
i1++;
text2[i2++] = 0;
我很確定這不是真的:演員不會神奇地影響它應用到的表達式的「上下文」。 – duskwuff
這確實是一個重複的帖子,我的歉意。 正確的方法是: text2 [i2 ++] =(char)(unsigned int)(x1 >> 8); text2 [i2 ++] =(char)((unsigned int)x1 >> 8); –
糟糕 - 我錯過了轉換之前的轉換無符號。我很抱歉。 –
在C中的等效將是:
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (unsigned char)(x1 >> 8)
在C的移位操作者將從符號位上拖動1如果它是在操作可變已簽名,如果不是將作用像java無符號移位。
的>>>
運營商在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位將導致零。
這是*無符號*右移操作符。我真的不知道C++的等價物是什麼...... – Ryan