java中的右移运算符

时间:2015-05-04 06:03:31

标签: java scjp

Page2

当5位右移2位为1时10右移2位是2然后加上3将是正确的?怎么打印0即使调试我也无法理解。

3 个答案:

答案 0 :(得分:6)

JavaDocs中提供的此表将帮助您了解Java中的操作符优先级

additive    + -       /\  High Precedence
                      ||
shift   << >> >>>     ||  Lower Precedence 

所以你的表达将是

a >> 2 + b >> 2;
a >> 12 >> 2;   // hence 0

答案 1 :(得分:2)

关于operator precedence的全部内容。加法运算符优先于移位运算符。

您的表达方式与:

相同
$groupsql="SELECT id, title FROM " . TABLE_PREFIX . "thegroup WHERE"; 
$first=true;    
foreach($group_ids as $value){
    if(!$first){ 
        $groupsql = $groupsql." OR "; 
    }else{
        $first = false; 
    } 
    $groupsql = $groupsql." id = '".$value."' ORDER BY groupid ASC";
}

答案 2 :(得分:1)

这是你想要的吗?

 int c = ((a >> 2) + b) >> 2; 

你正在向2 + b移动到右边。我假设你想把5个位置移位2个,对吗?

b000101 >> 2   ==   b0001øø
  | |___________________|_|
  |                     |
  |_____________________|

即。最左边的位向右移动2个位置,最右边的位也移动(但是在右侧没有更多的有效位置,所以它就会消失)并且数字变为剩下的 - 在这种情况下为“1”。如果您将数字5移动12个位置,您将得到零,因为5的二进制形式少于12个位置。在'5'的情况下,如果要保留非零值,最多可以移动2个位置。