Форум программистов, компьютерный форум 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 задание в тему подробнее

Показать сообщение отдельно
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
04.02.2013, 21:15  [ТС]     Наибольшая целая степень двойки, не превосходящая заданного числа n
Nick Alte, это то, что нужно
Только у Вас небольшая опечатка, из-за которой функция не работала:
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;
}
Но принцип понятен. Быстрее уже, наверно, нельзя...

Добавлено через 4 минуты
abit, Вы используете возведение в степень, а она очень тяжело работает...

Добавлено через 3 минуты
Хотя нет! если объединить присваивания, а вместо цикла for написать while, я думаю так быстрее будет на уровне машинного кода:
C++
1
2
3
4
5
6
unsigned int maxpot(unsigned int n)
{
unsigned int rv = 0;
while (n) rv |= n >>= 1;
return ++rv;
}
кто предложит более быстрый вариант - тому дам 100 рублей
 
Текущее время: 21:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru