我有一些C代码,其中无符号整数被(带符号)变量移位。例如,
1u << i;
转换为Java时,我可以用signed int替换它吗?
我认为左转是安全的,但我不确定正确的转变。
答案 0 :(得分:3)
在Java中,有两种类型的右移。 >>>
将附加0以填充正数和负数的空格(逻辑右移),而>>
如果为负则将附加1,如果为正,则附加0(符号扩展)。
在C和C ++中,如果数字为正数,>>
将插入零。但是,对于负数,这种情况取决于实现。可以附加零或者一个。
JavaScript的行为与>>
和>>>
的行为相同。
在C#中,当使用>>
作为负数时,除第一个之外的所有公开位都设置为0.第一个保持为1。
请注意,对于上述所有语言,带有正数的>>
会附加零。只有负数的情况会有所不同。此外,<<
将零附加到所有语言的公开位。
答案 1 :(得分:0)
左移是正常的,右移使用>>>
运算符。