У меня есть простой вопрос:левый бит сдвига 0 в Java
int a = 0;
a |= 1<<a;
System.out.println(a);
печатает "1". Зачем? Я думал, что сдвиг влево бит 0 в любое время был все равно 0. Где он вытащил 1 из?
У меня есть простой вопрос:левый бит сдвига 0 в Java
int a = 0;
a |= 1<<a;
System.out.println(a);
печатает "1". Зачем? Я думал, что сдвиг влево бит 0 в любое время был все равно 0. Где он вытащил 1 из?
Выражение 1 << a;
сместит значение 1
, a
число раз.
Другими словами, у вас есть значение 1:
0000001
Теперь вы переносите все это более 0 бит влево. После этого у вас:
0000001
Вы затем:
a |= 1 << a;
Который решает:
a = 0000000 | 0000001
Или:
a = 1;
Вы могли бы операнды вперемешку. Если вы пытаетесь перенести значение 0 на один бит влево, вы хотите:
a |= a << 1;
Вы используете оператора < < неправильным способом. Оно должно быть:
int a=0;
a |= a<<1;
System.out.println(a);
Вы оставили сдвигая буквального 1
по переменной a
. Значение переменной a
равно нулю. 1<<0 = 1
Итак, вы только что перевернули свои переменные. Попробуйте изменить переменные.
ohhhh это должно быть << 1! – Riz