【发布时间】:2012-05-01 23:34:14
【问题描述】:
我需要将Java的这一小部分转换为C++,但不知道'>>>'是什么......搜索了,但没有找到参考,只有在班次。 有人有什么想法吗?
int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (char) (x1 >>> 8);
【问题讨论】:
-
它是 unsigned 右移运算符。我真的不确定 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;
【讨论】:
x1 是什么类型,这些转换都是无用的.
C 中的等价物是:
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = (unsigned char)(x1 >> 8)
在 C 中,如果它正在操作的变量是有符号的,则移位运算符会将 1 从符号位拖过来,否则它将像 java 无符号移位一样。
【讨论】:
Java 中的 >>> 运算符是 logical shift 等效于 C++ 中 unsigned 类型的 >> 运算符。它将零移到左侧的空位位置。在有符号类型上,右移是逻辑还是arithmetic 由实现定义,因此您需要从一开始(或强制转换)使用无符号类型:
unsigned int x1;
x1 = text1[i1++] & 0xff;
text2[i2++] = static_cast<char>(x1 >> 8);
当然,这段代码似乎没有多大意义——x1 只有 8 个非零位,因为它被 0xff 屏蔽了,所以将其右移 8 位结果为零。
【讨论】: