Сдвиги (С++) (Немогу разобраться)

Модератор: Модераторы разделов

KnupK
Сообщения: 65
ОС: openSUSE 10.2 x86_64

Сдвиги (С++)

Сообщение KnupK »

<< сдвиг влево
>> сдвиг вправо

Побитовый сдвиг левого операнда на количество разрядов, соответствующее значению правого операнда. Результатом является целое число.

Абсолютно непонятно как это делаеться.Обьясните пожалуйста в подробности.Вот например выражение 54 << 3. И что с ним происходит?
So allein will ich nicht sein....
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Сдвиги (С++)

Сообщение Uncle_Theodore »

KnupK писал(а):
24.09.2007 16:19
<< сдвиг влево
>> сдвиг вправо

Побитовый сдвиг левого операнда на количество разрядов, соответствующее значению правого операнда. Результатом является целое число.

Абсолютно непонятно как это делаеться.Обьясните пожалуйста в подробности.Вот например выражение 54 << 3. И что с ним происходит?

Оно умножится на восемь (два в третьей).
54 -- это 110110 в двоичной системе. Если сдвинуть его на три разряда, то будет 110110000, то есть 432.
Ближайший аналог -- сдвиг запятой, когда число в десятеричной системе умножают на степень десятки. В двоичной системе произойдет умножение на степень двойки.
Спасибо сказали:
KnupK
Сообщения: 65
ОС: openSUSE 10.2 x86_64

Re: Сдвиги (С++)

Сообщение KnupK »

Ого O_o
Спасибо =)
So allein will ich nicht sein....
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Сдвиги (С++)

Сообщение sergio »

KnupK писал(а):
24.09.2007 19:36

Для целых со знаком ситуация немного сложнее, но в целом для левого сдвига << n - итог тот же - умножение на 2 в степени n.
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали: