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

Наибольшая целая степень двойки, не превосходящая заданного числа n - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Переменные в c++ http://www.cyberforum.ru/cpp-beginners/thread778951.html
Помогите разобраться в теории. Так вот допустим мы создаем переменную в стеке int a; тогда в стеке где то по адресу скажем 004 выделяется 4 байта в которые записывается переменная в двоичном коде. Фррр а вот теперь вопрос а где храниться сам адрес 004 , откуда программа знает что переменная храниться в этом адресе? она что где то его сохраняет ?а если мы где то храним адрес то как мы узнаем...
C++ Написать рекурсивную процедуру перевода числа из десятичной системы в N –ю (2<= N <= 16) Написать рекурсивную процедуру перевода числа из десятичной системы в N –ю (2<= N <= 16) с циклами всё сделать гораздо проще, но вот задание такое, а рекурсию чёт я не особо втыкаю( http://www.cyberforum.ru/cpp-beginners/thread778948.html
C++ Дано предложение. Вывести все буквы м и н в нем
Дано предложение. Вывести все буквы м и н в нем. с помощью функций. С++
C++ Нахождение слова, по заданной букве
Дано предложение. Найти какое-нибудь слово, начинающееся на букву "к". С++
C++ Символы стоящие на чётных местах,заменить на букву Ы http://www.cyberforum.ru/cpp-beginners/thread778905.html
Дано предложение.Все его символы стоящие на чётных местах,заменить на букву Ы. Через С++
C++ Дайте, пожалуйста, контрпримеры Задача №93 в acmp задание в тему подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
04.02.2013, 20:25     Наибольшая целая степень двойки, не превосходящая заданного числа n
Способ, конечно, есть. Сдвигать число на один разряд, пока оно не превратится в 0 и накапливать результаты операцией OR. Получится минимальная степень двойки, превышающая заданное число, за вычетом единицы. Сдвигаем результат и добавляем единицу - получаем искомое.
C++
1
2
3
4
5
6
7
unsigned int maxpot(unsigned int n)
{
    unsigned int rv = 0;
    for(; n; n <<= 1)
        rv |= n;
    return (rv >> 1) + 1;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru