相关疑难解决方法(0)

>>>和>>之间的区别

运算符>>>>>Java 之间有什么区别?

java syntax operators

354
推荐指数
7
解决办法
19万
查看次数

C#/ Java等高级语言掩盖位移计数操作数的原因是什么?

这更多的是语言设计而不是编程问题.

以下是JLS 15.19移位运算符的摘录:

如果左手操作数的提升类型是int,则只使用右手操作数的五个最低位作为移位距离.

如果左侧操作数的提升类型是long,则只使用右侧操作数的六个最低位作为移位距离.

这种行为也在C#中指定,虽然我不确定它是否在Javascript的官方规范中(如果有的话),但至少基于我自己的测试也是如此.

结果是以下情况属实:

(1 << 32) == 1
Run Code Online (Sandbox Code Playgroud)

据我所知,这个规范很可能受到以下事实的启发:当移位32位值(64位为6位)时,底层硬件只占用计数操作数的5位,我可以理解在例如,JVM级别,但为什么高级语言(如C#和Java)会保留这种相当低级别的行为?它们不应该提供超出硬件实现的更抽象的视图,并且行为更直观吗?(如果他们可以采取负数来表示向其他方向转移,那就更好了!)

c# java bit-manipulation language-design bit-shift

16
推荐指数
3
解决办法
1733
查看次数