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

реализация операции декримента - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Числа выводятся на консоль в виде -1.#IO http://www.cyberforum.ru/cpp-beginners/thread973467.html
Прилагаю код. При изменении точности вывода меняются лишь буквы- -1.#IND, -1.#IND0, -1. #IND00 и т. д. Что это значит, почему они не выводятся нормально? #include <cstdio> #include <cstdlib>...
C++ Дано действительное E>0. Найти первый член y[n], для которого выполнено y[n]-y[n-1]<E Здравствуйте! Нужно решить задачу на C++: Пусть, y=0 y=(y+1)/(y+2) k=1,2,... Дано действительное E>0. Найти первый член y, для которого выполнено y-y<E. Прошу помощи в решении! Заранее... http://www.cyberforum.ru/cpp-beginners/thread973466.html
C++ класс с структурой и работой с файлом
всем доброго вечера. хочу попросить о помощи в таком моменте,как реализация класса со структурой и работой с файлом. буду рада любому отклику,любой помощи. извиняюсь за неоформленный код - пишу с...
Ввести строку (не более 100 символов и не менее 30), вывести символы с 7 по 15 C++
Задачку подкинули, компилятор говорит, что я фигню написал, поделитесь идеями. Вот текст: ввести произвольную строку, содержащую не более 100 символов и не менее 30, выдать на печать символы начиная...
C++ Вычислить сумму N слагаемых http://www.cyberforum.ru/cpp-beginners/thread973455.html
Не могу решить задачку : Вычислить сумму N слагаемых (N задается оператором ввода): S=1+1/2+1/4+1/8+1/16+... Как я поняла надо создать 3 переменные : для слагаемых,суммы и знаменателя. Потом...
C++ Нужно переставить формулу и отладить Написал программу (прикреплена к теме), там нужно в указанном месте, подставить другую формулу (Прикреплена к теме). И отладить программу. Пытаюсь подставлять, выдает неправильные ответы. подробнее

Показать сообщение отдельно
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440

реализация операции декримента - C++

10.10.2013, 00:01. Просмотров 332. Ответов 6
Метки (Все метки)

На лабах задали написать алгоритм "обращенного двоичного счета", который, на сколько я понял (не удалось уточнить гуглением), представляет из себя перебор бинарный векторов в порядке лексикографического убывания. Т. е. в с++ осуществляется операцией --. Естественно, использовать -- намного проще и быстрее. Но тогда что останется от лабы?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
void print_v(unsigned char v) {
    for (int i(8); i--; std::cout << static_cast<bool>(v & 1 << i)) {}
    std::cout << std::endl;
}
inline unsigned char& decr(register unsigned char& v) {
    if (!v) return v = -1;//чтобы не писать лишний проверок в цикле
    register unsigned char i(1);
    while (!(v & i))  i <<= 1;//Ищем первый ненулевой элемент
    v &= ~i;//Зануляем его
    while (i >>= 1) v |= i;//проставляем в младшие разряды единицы
    return v;
}
int main() {
    unsigned char b(0);
    while (decr(b))//Эквивалентно выражению while (--b)
        print_v(b);//Вывести бинарный вектор
    return 0;
}
Короче, написан вариант функции со следующими требованиями к коду:
1. Это всё-таки должен быть с++ а не какой-нибудь там ассемблер
2. Написать максимально производительный код.
Опубликовано здесь по двум причинам
1. Я доволен результатом и хочу продемонстрировать его окружающим
2. Я уверен, что найдутся люди, которые дадут дельные советы по совершенствованию написанного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru