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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 14:43   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию Интересные конструкции с++

Искала реализацию одного алгоритма, увидела вот это:
Код:
 while ((b & 1) == 0)
b >>= 1, e++;
m = n % 8;
Код на c++, может кто-то расшифрует это?
Насколько понимаю условие while если b=0 цикл выполняется.
А вот вторая строчка вводит в ступор
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 13.10.2011, 14:56   #2
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

&-побитовое и
>> -побитовой сдвиг

while ((b & 1) == 0) //выполняется если B четный
b >>= 1, e++; //тут не совсем понятно зачем равно
//значения b делится без остатка на 2 , e+1

Последний раз редактировалось _kilik_; 13.10.2011 в 15:23.
_kilik_ вне форума Ответить с цитированием
Старый 13.10.2011, 15:00   #3
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Код:
m = n % 8;
Получить остаток от деления числа n на 8 и поместить это значение в переменную m (но это вы знаете )

Код:
b >>= 1, e++;
Да, кстати, то, что тут запятая - не является ошибкой. Это такое операция. Для чего она, к сожалению, не знаю.

Я могу ошибаться, но, как мне кажется такая конструкция
Код:
while ((b & 1) == 0)
b >>= 1, e++;
эквивалентна
Код:
while ((b & 1) == 0)
                  { b >>= 1; e++;};
Да, ещё вот что. условия у оператора While можно записать короче (ИМХО):
Код:
while (!(b & 1))

Последний раз редактировалось Вадим Мошев; 13.10.2011 в 15:05.
Вадим Мошев вне форума Ответить с цитированием
Старый 13.10.2011, 15:01   #4
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

почему между сдвигом и инкрементом e запятая?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 13.10.2011, 15:05   #5
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

while ((b & 1) == 0) ошибочка вышла выполняется до тех пор пока B четный
_kilik_ вне форума Ответить с цитированием
Старый 13.10.2011, 15:06   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от Sparky Посмотреть сообщение
почему между сдвигом и инкрементом e запятая?
Я ответил. Выше написано

И вот ещё http://iproc.ru/programming/cpp-comma-operator/
Вадим Мошев вне форума Ответить с цитированием
Старый 13.10.2011, 22:47   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Sparky Посмотреть сообщение
Искала реализацию одного алгоритма, увидела вот это:
Код:
 while ((b & 1) == 0)
b >>= 1, e++;
m = n % 8;
Код на c++, может кто-то расшифрует это?
Насколько понимаю условие while если b=0 цикл выполняется.
А вот вторая строчка вводит в ступор
Вроде уже всё ответили, лишь дополню:
b & 1 == 0 - проверка, установлен ли в единицу 0-й (самый правый) бит числа (если да, то число нечётное)
b >>= 1, e++; - смещение вправо на один бит (деление на два) и инкремент. , - оператор последовательности, на самом деле не очень хороший стиль, тут используется только для того, чтобы не писать фигурные скобки {}
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
циклические конструкции nex 9119 Помощь студентам 1 18.12.2010 17:34
селективные конструкции (switch) Ste Общие вопросы C/C++ 9 04.12.2010 17:05
Вопрос по конструкции if() С++ ROD Помощь студентам 2 20.12.2008 20:14
вопрос по использованию конструкции if zetrix Microsoft Office Excel 0 31.10.2006 07:52