2

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

1) 从 C++ 到 Java 的“unsigned int”翻译为“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

4 回答 4

2

long用Java签名。

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

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

于 2013-01-11T18:51:14.763 回答
2

它应该工作。请记住,Javalong是 64 位的。唯一真正的区别是 Java 整数是有符号的。

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

这些将改变行为: *, /, %,<

使用>>>而不是对(推送的位是,而不是 MSB 副本)>>进行无符号解释。/2**k0

于 2013-01-11T18:52:45.010 回答
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。所以,它有所作为。有关更多信息,请参阅此处

于 2013-01-11T18:20:34.593 回答
1

我相信您所做的事情是安全的,并且应该在 Java 中运行良好。如您所展示的那样使用的按位运算应该可以按预期工作。

于 2013-01-11T18:41:10.757 回答