Java语言规范中的位移位运算符描述

Java语言规范中的位移位运算符描述,java,bit-shift,jls,Java,Bit Shift,Jls,JLS8 At中规定的At 如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受了位逻辑AND运算符(§15.22.1),掩码值为0x1f(0b11111)。因此,实际使用的移动距离始终在0到31之间(包括0到31) 我不清楚这个黑体字的说法。一个例子是非常值得赞赏的。 < P>这是java开发C++和C++世界的编译器优化。对于32位int,如果使用大于或等于31的位移位参数,则对于正int,将结果值设置为0。(对于一个否定的论点,C和C++在移

JLS8 At中规定的At

如果左侧操作数的提升类型为int,则仅将右侧操作数的五个最低阶位用作移位距离。这就好像右侧操作数接受了位逻辑AND运算符(§15.22.1),掩码值为0x1f(0b11111)。因此,实际使用的移动距离始终在0到31之间(包括0到31)


我不清楚这个黑体字的说法。一个例子是非常值得赞赏的。

< P>这是java开发C++和C++世界的编译器优化。对于32位
int
,如果使用大于或等于31的位移位参数,则对于正
int
,将结果值设置为0。(对于一个否定的论点,C和C++在移位中的行为是定义的实现)。 <> P>而在C++和C++中,对于一个32位<代码> int ,实际上使用大于31的值实际上是未定义的行为,java BoD实际上已经明确地定义了行为,并且简单地用32的参数(这是C和C++编译器实际上所做的)来执行移位。您引用的JLS代码段中明确提到了此方法


提取一个数字的最低五阶位相当于取该数字的模32。

我不清楚粗体的说法。如果你能举个例子告诉我,我需要一个例子。我添加了最后一句话。还不清楚吗?事实上最后一句话就是我想要的。我想我需要回到掩蔽。顺便说一句,感谢我这是为什么我认为每个程序员都应该具备C语言基础的一个缩影。对我来说,C语言是第一个从语言实验的原始汤中涌现出来的活语言。事实上,我是,但现在我真的需要回到那里获得更多的基础知识。