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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Live4Sky
6 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 42
#1

Как приведенный код выводит ближайшую степень двойки? Разобрать работу программы - C++

23.01.2014, 05:15. Просмотров 476. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
unsigned k ;
cin>>k;
for (--k;k&(k+1);k|=k+1);
cout<<++k;
вот есть программа?что она делает - я знаю(выводит ближайшую степень двойки).
что мне нужно? - как она это делает? ну т.е. прям пошагово..спасибо заранее
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 05:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как приведенный код выводит ближайшую степень двойки? Разобрать работу программы (C++):

Подробно разобрать приведенный код и его назначение в целом - C++
Вот код:// считаем кол-во кластеров по количеству байт равных 0x80 while ( !feof(f) ) { c1 =...

Вычислить 10-ю степень двойки сложением, умножением и просто возведением в степень. - C++
Написать код на С++ или С# или на Java Вычислить 10-ю степень двойки 1 - сложением, умножением и просто возведением в степень.

Разобрать код, демонстрирующий работу с указателями - C++
Здравствуйте. Помогите пожалуйста разобраться с работой указателей. #include &lt;iostream&gt; using namespace std; int main() { ...

Не могу до конца разобрать код программы - C++
Задание выглядит следующим образом дан код программы его надо прочитать и разобрать, т.е. объяснить выполнение программы. И вот...

степень двойки - C++
Вводится число. Напечатать YES, если оно является степенью двойки, NO - иначе. int a,b=1; cin&gt;&gt;a; for(;;) { b=b*2; ...

Степень двойки - C++
Изучаю программирование. Попытался решить известную задачу. Программа компилируется, но если ввести к примеру 8 она выдает &quot;no&quot;. В чем я...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TheDanger227
6 / 6 / 1
Регистрация: 27.11.2012
Сообщений: 58
23.01.2014, 11:47 #2
отладчики для чего существуют?
MicM
822 / 489 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
23.01.2014, 13:07 #3
1) Цикл начинается с числа, на 1 меньшего, чем было введено, потому что, если уже была введена степень двойки, то программа должна именно её и вывести.
2) Цикл выполняется, пока результат конъюнкции данного числа с последующим - истина. Ложь будет только тогда, когда следующее число является степенью двойки, т. к. в двоичной его записи старший разряд равен 1, а все младшие - нулю.
3) Ну и шаг цикла - дизъюнкция числа с последующим числом, т. е. по сути, этим действием в двоичной записи результирующего числа младшие разряды заполняются единицами (ну по правилу дизъюнкции естественно).
Alex5
1052 / 715 / 105
Регистрация: 12.04.2010
Сообщений: 1,810
23.01.2014, 13:09 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Live4Sky Посмотреть сообщение
C++
1
2
3
4
unsigned k ;
cin>>k;
for (--k;k&(k+1);k|=k+1);
cout<<++k;
Данный код эквивалентен
C++
1
2
3
4
5
6
--k;
while( k&(k+1) ) // то есть, пока  k&(k+1) не равно нулю 
{
    k = k | (k+1);
}
++k;
Чтобы понять, что делает команда k = k | (k+1); попробуем вычислить для какого-то конкретного числа.
Пример
1 0 0 1 1 0 1 : k
1 0 0 1 1 1 0 : k + 1
1 0 0 1 1 1 1 : k | ( k + 1 )
Ещё пример
1 1 0 0 0 0 1 1 1 : k
1 1 0 0 0 1 0 0 0 : k + 1
1 1 0 0 0 1 1 1 1 : k | ( k + 1 )
Можете Вы заметить какую-нибудь закономерность? Если нет, можно попробовать ещё к.-н. значение k. Для этого потребуется вспомнить: 1) как складывать числа "столбиком", 2) что означает операция |
Live4Sky
6 / 1 / 1
Регистрация: 04.10.2013
Сообщений: 42
30.01.2014, 09:00  [ТС] #5
Цитата Сообщение от TheDanger227 Посмотреть сообщение
отладчики для чего существуют?
даже и не знаю, что ответить.... скорее всего для отладки????
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 09:00
Привет! Вот еще темы с ответами:

Точная степень двойки - C++
Само задание: Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае. ...

Максимальная степень двойки - C++
&quot;F(a, b) = x - 1, где x - максимальная степень двойки, на которую делится нацело a-b, если a ≠ b и F(a, b) = -1, если a = b.&quot; Это как...

Найти степень двойки - C++
Дано целое число N&gt;0, являющееся некоторой степенью числа 2:N=2 ^k. Найти целое число К - показатель этой степени. Если можно на С

Как оформить приведенный код в виде функции - C++
Доброй ночи всем. Помогите пожалуйста. Еле смог написать структуру, лазая по форуму, а вот оформить в виде функции не могу вообще никак( ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.01.2014, 09:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru