将代码从C转换为Java:转移

时间:2011-08-07 18:31:27

标签: java c bit-manipulation

我有一些C代码,其中无符号整数被(带符号)变量移位。例如,

1u << i;

转换为Java时,我可以用signed int替换它吗?

我认为左转是安全的,但我不确定正确的转变。

2 个答案:

答案 0 :(得分:3)

在Java中,有两种类型的右移。 >>>将附加0以填充正数和负数的空格(逻辑右移),而>>如果为负则将附加1,如果为正,则附加0(符号扩展)。

在C和C ++中,如果数字为正数,>>将插入零。但是,对于负数,这种情况取决于实现。可以附加零或者一个。

JavaScript的行为与>>>>>的行为相同。

在C#中,当使用>>作为负数时,除第一个之外的所有公开位都设置为0.第一个保持为1。

请注意,对于上述所有语言,带有正数的>>会附加零。只有负数的情况会有所不同。此外,<<将零附加到所有语言的公开位。

答案 1 :(得分:0)

左移是正常的,右移使用>>>运算符。