Побитовый сдвиг <<, не получается операция

Рейтинг: 2Ответов: 2Опубликовано: 02.03.2015

Двоичная система исчисления.

Знаковый оператор сдвига вправо >>

" Все биты смещаются вправо. Число слева дополняется нулем, если число положительное и единицей, если отрицательное. Операция используется для быстрого деления на 2. Если делится нечетное число, то остаток отбрасывается для положительных чисел и сохраняется для отрицательных.

"Знаковый оператор сдвига влево <<

Все биты смещаются влево. Число справа дополняется нулем. Операция используется для быстрого умножения на 2. Если оператор применяется к числу, умножение на 2 которого будет больше максимального значения int (2147483647), то в результате будет отрицательное число. Это происходит потому, что краний левый бит, который отвечает за знак числа, выставляется в единицу, что соответствует отрицательным числам.

Почему когда я делаю все в еклипс, то там работает не так? Например:

    int x = 10;
    String str = Integer.toBinaryString(x);

    System.out.println(x+ "  "+ str );  //10  1010

     x = x <<2;
     System.out.println(x);  // 40

Тут же другое должно получится???

Это как основной вопрос.

Второй вопрос: как число

String str = Integer.toBinaryString(x);

уже разложеное побитно, записать в инт, чтобы сделать с ним побитовую операцию?

Ответы

▲ 2Принят

Нет, не так. 1010 сдвигается на 2 разряда влево и получаем 101000, что соответствует числу 40.

Отвечая на второй вопрос: Integer.parseUnsignedInt(str, 2)

▲ 4

@kamenb, в двоичной системе вообще-то будет

0000 0000 0000 0000 0000 0000 0000 1010

, и то если система 32битная. Со сдвигом -

0000 0000 0000 0000 0000 0000 0010 1000