2014-10-28 3 views
1

У меня есть следующий кодКакой тип вывода оператора сдвига бит?

public static void main(String[] args){ 
      //find sign of 32 bit integer 
    int a=0x6348987C; 
    a=a>>31; 
    int one=a&1; 
    if(one==0) 
    { 
    System.out.println("Positive"); 
    } 
    else 
    { 
    System.out.println("Negative"); 
    } 

    } 

Если изменить сравнение строки с if(a&1 ==0) компиляция терпит неудачу с оператором & не может быть применен в целое, булево, mking мне интересно, что в результате тип оператора сдвига.

+3

'==' имеет более высокий приоритет, чем '&'. – icza

ответ

2

Оператор равенства == предшествует поразрядному оператору И в терминах приоритета оператора (см. this page). Вы должны поместить круглые скобки, чтобы сделать последний предшествуют:

if ((a & 1) == 0) { 

Обратите внимание, что тип результата a & 1 тот же тип one в исходном коде (int).

+0

Хм .. Спасибо за указание, приоритет оператора, ошибка не имела для меня никакого смысла. – learningtocode

Смежные вопросы