C ++ to Java使用按位运算符和unsigned int移植代码

时间:2013-01-11 18:18:22

标签: java c++ porting

我需要将C ++代码翻译成Java。我有两个我担心的问题。

1)将'unsigned int'从C ++转换为Java为'long'。 我选择使用long来增加存储容量。

2)使用按位运算符,特别是|和<<鉴于 我已将unsigned int值转换为long,这是否有 对这些运营商有什么不良影响?例如在C ++中:

unsigned int a;
unsigned int b;
unsigned int c;

a | (b<<c)

可以在Java中执行此操作:

long a, b, c;

a | (b<<c)

请告诉我您认为我可能会遇到的任何问题 做这些事。

由于

4 个答案:

答案 0 :(得分:2)

long已在Java中签名。

  

长数据类型是64位带符号的二进制补码整数。它有   最小值为-9,223,372,036,854,775,808,最大值为   9,223,372,036,854,775,807(含)。

来自C ++的

unsigned int是一个字长(32位机器上的32位)。它的范围从0到4,294,967,295。

答案 1 :(得分:2)

它应该工作。请记住,Java long是64位的。唯一真正的区别是Java整数已签名。

运算符的行为应与unsigned相同: +-==&|^<<

这会改变行为: */%<

使用>>>代替>>来对/2**k进行无符号解释(推送的位数为0,而不是MSB副本。)

答案 2 :(得分:1)

       Bitwise operations

  It's important to remember that the unsigned keyword affects 
  the interpretation, not the representation of a number. In other 
  words, in cases where we aren't interpreting a value arithmetically— so-called
  bitwise operations such as AND, OR, XOR— it makes essentially no 
  difference whether a value is marked as "signed" or "unsigned"

。 unsigned int相当于java中的long。所以,它有所不同。 有关更多信息,请参阅here

答案 3 :(得分:1)

我相信你做的是安全的,应该在Java中运作良好。在您显示时使用的按位运算应该按预期工作。