Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 20:16   #1
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию Как работают операции <<= и >>= (c++) ?

Подскажите пожалуйста, что делают эти операции? Не могу понять, что делает этот цикл - while((tmp <<= 1) <= num);

Последний раз редактировалось dollemika; 19.06.2012 в 20:22.
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 20:22   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

знаковый (если не ошибаюсь) битовый сдвиг влево/вправо с присваиванием.

Код:
while((tmp <<= 1) <= num)
1) tmp = tmp << 1; // сдвигаем переменную tmp на один бит влево
2) если (tmp <= num), выполняем тело while и уходим на шаг 1)
3) иначе обходим while и продолжаем выполенние со следующего оператора

вроде так.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 19.06.2012, 20:26   #3
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию

Дело в том, что это весь while и есть.. Т.е. "тела цикла" так сказать нету
Т.е. операцией <<= мы сдвинули влево на 1 бит и этому биту присваиваем единичку, так?
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 20:29   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

иначе цикл можно записать так:
Код:
while(tmp<=num)
    tmp<<=1;
или же
Код:
while(tmp<=num)
    tmp=tmp<<1;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2012, 20:30   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
мы сдвинули влево на 1 бит и этому биту присваиваем единичку, так?
Нет, нолик.
110 {делаем сдвиг влево} 1100
Для расширения кругозора - http://ru.wikipedia.org/wiki/Битовый_сдвиг
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 19.06.2012 в 20:33.
BDA вне форума Ответить с цитированием
Старый 19.06.2012, 20:31   #6
dollemika
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 29
По умолчанию

Спасибо большое!
dollemika вне форума Ответить с цитированием
Старый 19.06.2012, 21:46   #7
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А еще помни, что сдвиг влево на N бит эквивалентен умножению на два в степени N, а сдвиг вправо - делению.
Son Of Pain вне форума Ответить с цитированием
Старый 19.06.2012, 22:20   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
сдвиг вправо - делению
верно до определённых пределов. Например, результат выполнения этих двух фрагментов кода будет разный:

Код:
	int i = -1;
	i >>= 1;
Код:
	int i = -1;
	i /= 2;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А как работают антивирусы? MooNDeaR Свободное общение 35 04.01.2012 16:21
Как работают личные сообщения? dvuwka Общие вопросы по программированию, компьютерный форум 7 03.03.2011 18:31
как работают and or при пирсваивании?? maloun Общие вопросы Delphi 9 08.02.2011 16:58
События и делегаты в C# как они работают _PROGRAMM_ Общие вопросы .NET 11 04.02.2010 06:44
Как работают программы обходящие NAT? Pedro Свободное общение 4 20.01.2010 17:20