将代码从C转换为Java:Shift

将代码从C转换为Java:Shift,java,c,bit-manipulation,Java,C,Bit Manipulation,我有一些C代码,其中一个无符号整数被一个(有符号)变量移位。比如说, 1u << i; 1u对于左移很好,对于右移使用>操作符。在Java中,有两种类型的右移>>>将附加0以填充正数和负数的空格(逻辑右移),而>将附加1(负数)和0(正数)(符号扩展) 在C和C++中, > >代码>如果数字是正,则插入零。但是,对于负数,这种情况取决于实现。可能会附加0或1 对于>和>,其行为方式与Java相同 在C#中,当对负数使用>时,除第一个外的所有暴露位都设置为0。第一个保持在1 请注意,

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

1u << i;

1u对于左移很好,对于右移使用
>
操作符。

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

<>在C和C++中,<代码> > >代码>如果数字是正,则插入零。但是,对于负数,这种情况取决于实现。可能会附加0或1

对于
>
>
,其行为方式与Java相同

在C#中,当对负数使用
>
时,除第一个外的所有暴露位都设置为0。第一个保持在1


请注意,对于上述所有语言,带有正数的
>
会附加零。只有负数的情况不同。另外,
为了澄清,
>
将签名扩展。所以如果操作数为负,它将附加1。@Oli是的,我正要自己加上它。谢谢,意思是>>>。>>在Java中表示其他内容。@Ojala在C中,>>会在数字为正数时填充0。但是,当使用负数时,可以填写0或1,这取决于实现。因此,gravitybringer的答案是不正确的。您可以添加
>
是无符号右移运算符,并且可能解释它为什么工作,而不是右移运算符