Форум программистов, компьютерный форум CyberForum.ru

Как работают побитовые сдвиги? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 265, средняя оценка - 4.71
Kash
Сообщений: n/a
13.04.2007, 19:36     Как работают побитовые сдвиги? #1
Люди объясните плиз как работают побитовые сдвиги
<< и >>, а то что то совсем запарился :confused:
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2007, 19:36     Как работают побитовые сдвиги?
Посмотрите здесь:

Сдвиги C++
Побитовые опреции в си.Как решить ??? C++
Сдвиги. (<< и >>) C++
C++ Побитовые операции (программа, которая интерпретирует старшие 3 бита как некоторое число n...)
Побитовые сдвиги C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fakel15
22 / 21 / 1
Регистрация: 03.03.2007
Сообщений: 4
14.04.2007, 16:00     Как работают побитовые сдвиги? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Все банально просто...
val << n - это сдвиг влево переменной val на n разрядов. то же самое что умножение на 2 в определенной степени.
пример:
int val = 4;
int temp = val << 3;
в результате temp=32. по другому это val*(2^3);

val >> n - это сдвиг вправо переменной val на n разрядов. то же самое что деление на 2 в определенной степени.
пример:
int val = 4;
int temp = val >> 2;
в результате temp=1. по другому это val/(2^2);

Вот в принципе и все...
Желаю удачи
Rich
12 / 12 / 1
Регистрация: 16.03.2007
Сообщений: 108
15.04.2007, 13:17     Как работают побитовые сдвиги? #3
Скачай книгу про C++. Вот цитата из рукодовства:
Операции сдвига << и >> группируют слева направо. Обе выполняют
одно обычное арифметическое преобразование над своими операндами,
каждый из которых должен быть целым. В этом случае правый операнд
преобразуется к типу int; тип результата совпадает с типом левого
операнда. Результат неопределен, если правый операнд отрицателен
или больше или равен длине объекта в битах.

- стр 270 -

сдвиговое_выражение:
выражение << выражение
выражение >> выражение
Значением Е1 << Е2 является Е1 (рассматриваемое как битовое
представление), сдвинутое влево на Е2 битов; освободившиеся биты
заполняются нулями. Значением Е1 >> Е2 является Е1 , сдвинутое
вправо на Е2 битовых позиций. Гарантируется, что сдвиг вправо
является логическим (заполнение нулями), если Е1 является unsigned;
в противном случае он может быть арифметичевким (заполнение копией
знакового бита).
broDiaga_cpp
 Аватар для broDiaga_cpp
19 / 9 / 1
Регистрация: 20.02.2010
Сообщений: 180
03.09.2013, 19:59     Как работают побитовые сдвиги? #4
А можно ли как-то получить старший сдвинутый бит при побитовом сдвиге влево?
Т.е. есть число 1001001
применяем операцию сдвига влево на 1 бит какой-то функцией my_func_shift(int a)
получаем 0010010, но функция возвращает сдвинутый старший бит единицу.
Есть такая функция в плюсах?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.09.2013, 20:05     Как работают побитовые сдвиги? #5
тема старая.
нафига тебе получать этот бит?
А если сдвиг не на 1 влево, а на 2,3...n?
Не легче отдельной операцией получить старшие биты, сдвинув исходное число на n-1 вправо?
broDiaga_cpp
 Аватар для broDiaga_cpp
19 / 9 / 1
Регистрация: 20.02.2010
Сообщений: 180
03.09.2013, 20:10     Как работают побитовые сдвиги? #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
нафига тебе получать этот бит?
Какая разница? Необходимо.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А если сдвиг не на 1 влево, а на 2,3...n?
Требуется только на 1 бит.
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Не легче отдельной операцией получить старшие биты, сдвинув исходное число на n-1 вправо?
Нецелесообразно с точки зрения производительности.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.09.2013, 20:28     Как работают побитовые сдвиги? #7
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Нецелесообразно с точки зрения производительности.
Какой ещё производительности? Ты не о производительности думай!
Короче, ответ: нет.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
03.09.2013, 20:36     Как работают побитовые сдвиги? #8
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Есть такая функция в плюсах?
нет
но можно сделать
C++
1
2
3
4
5
6
7
int Myfunc(int & aa)
{
 unsigned int tmp=0x80000000&aa;// выделяем старший бит
 aa=aa<<1;// сдвиг
 tmp>>=31;//старший бит загоняем в младший
return tmp; 
}
broDiaga_cpp
 Аватар для broDiaga_cpp
19 / 9 / 1
Регистрация: 20.02.2010
Сообщений: 180
03.09.2013, 20:43     Как работают побитовые сдвиги? #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Какой ещё производительности? Ты не о производительности думай!
Если бы речь шла о лабе в институте - я бы согласился, что плевать на производительность. Но речь идёт не о лабе и на счету каждая миллисекунда.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
03.09.2013, 20:56     Как работают побитовые сдвиги? #10
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Но речь идёт не о лабе и на счету каждая миллисекунда.
за одну миллисекунду пройдут тысячи операций
и кто тебе сказал что винда "система реального времени"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2013, 22:13     Как работают побитовые сдвиги?
Еще ссылки по теме:

C++ Побитовые сдвиги
Побитовые сдвиги C++
Не работают побитовые операции с++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,656
Записей в блоге: 1
03.09.2013, 22:13     Как работают побитовые сдвиги? #11
Цитата Сообщение от broDiaga_cpp Посмотреть сообщение
Если бы речь шла о лабе в институте - я бы согласился, что плевать на производительность. Но речь идёт не о лабе и на счету каждая миллисекунда.
А если "дорога каждая миллисекунда" - делай ассемблерную вставку/процедуру с циклическим сдвигом или с использованием флажка процессора.
Yandex
Объявления
03.09.2013, 22:13     Как работают побитовые сдвиги?
Ответ Создать тему
Опции темы

Текущее время: 21:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru