3

可能重复:
什么是 C++ 中的 >>> 操作

我需要将Java的这一小部分转换为C ++,但不知道'>>>'是什么......搜索过,但没有找到参考,只有在班次。有没有人有任何想法?

int x1;

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

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

3 回答 3

4

无符号右移 ( >>>) 在 C++ 中不存在,因为它不是必需的——C++ 具有不同的有符号和无符号整数类型。如果您希望右移是无符号的,请将要移动的变量设为无符号:

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

话虽如此,您正在翻译的代码很愚蠢。在 Java 中,第二个操作的结果将始终为零,因此您可以轻松地将其转换为:

i1++;
text2[i2++] = 0;
于 2012-05-01T23:39:04.103 回答
0

C中的等价物是:

unsigned int x1;

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

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

在 C 中,如果它正在操作的变量是有符号的,则移位运算符将从符号位拖动 1,否则它将像 java 无符号移位一样。

于 2012-05-01T23:38:39.997 回答
0

>>>Java 中的运算符是与 C++ 中的类型运算符等效的逻辑移位。它将零移到左侧的空位位置。在有符号类型上,右移是逻辑还是算术是实现定义的,因此您需要从一开始(或强制转换)使用无符号类型:>>unsigned

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

当然,这段代码似乎没有多大意义——<code>x1 只有 8 个非零位,因为它被 屏蔽了0xff,因此将其右移 8 位结果为零。

于 2012-05-01T23:44:08.437 回答