我需要将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)
请告诉我您认为我可能会遇到的任何问题 做这些事。
由于
答案 0 :(得分:2)
long
已在Java中签名。
来自C ++的长数据类型是64位带符号的二进制补码整数。它有 最小值为-9,223,372,036,854,775,808,最大值为 9,223,372,036,854,775,807(含)。
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中运作良好。在您显示时使用的按位运算应该按预期工作。