'>>>' Java to C++

'>>>' Java to C++

本文关键字:gt C++ Java to      更新时间:2023-10-16

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

我需要将 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;

C 中的等价物是:

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

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

Java 中的

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

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

当然,这段代码似乎没有多大意义——x1只有 8 个非零位,因为它被 0xff 屏蔽了,所以将其右移 8 位会导致零。