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