2013-08-02 4 views
2

У меня есть простой вопрос:левый бит сдвига 0 в Java

int a = 0; 
    a |= 1<<a; 
    System.out.println(a); 

печатает "1". Зачем? Я думал, что сдвиг влево бит 0 в любое время был все равно 0. Где он вытащил 1 из?

+0

ohhhh это должно быть << 1! – Riz

ответ

8

Выражение 1 << a; сместит значение 1, a число раз.

Другими словами, у вас есть значение 1:

0000001 

Теперь вы переносите все это более 0 бит влево. После этого у вас:

0000001 

Вы затем:

a |= 1 << a; 

Который решает:

a = 0000000 | 0000001 

Или:

a = 1; 

Вы могли бы операнды вперемешку. Если вы пытаетесь перенести значение 0 на один бит влево, вы хотите:

a |= a << 1; 
+0

LHS там должно быть все 0, не так ли? – yshavit

+0

@yshavit - Не следует. –

+0

a равно 0, поэтому оно должно быть '0 | 1' – yshavit

4

Вы используете оператора < < неправильным способом. Оно должно быть:

int a=0; 
a |= a<<1; 
System.out.println(a); 
2

Вы оставили сдвигая буквального 1 по переменной a. Значение переменной a равно нулю. 1<<0 = 1

Итак, вы только что перевернули свои переменные. Попробуйте изменить переменные.

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