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

Изменить функцию в обратном порядке - C++

Восстановить пароль Регистрация
 
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 08:27     Изменить функцию в обратном порядке #1
Как изменить функцию в обратном порядке?
вот функция в которую подаёшь вектор состоящий из 8ми элементов и она возвращает элемент типа char, в которую забиты 0 и 1.
C++
1
2
3
4
5
6
7
8
9
10
char ber(vector <bool> fg) 
{
   char byte = 0;
        for(int i = 0; i < fg.size(); ++i) 
        {
            if(fg.at(i))
                byte |= 1 << i; //ВОТ ЭТА СТРОКА МНЕ НЕ ЯСНА(|) ЭТО ОПЕРАНД ПОБИТОВОГО ИЛИ, А БОЛЬШЕ Я НЕ ЗНАЮ
        }
return byte;
}
а теперь мне надо наоборот эту переменную подавать в качестве аргумента функции, а на выходе получать vector<bool> из 8ми элементов.
Я бы и сам сделал, но так и не разобрался как работает строка с операндом (|=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 08:27     Изменить функцию в обратном порядке
Посмотрите здесь:

C++ в обратном порядке
C++ Реализовать функцию, которая переписывает элементы входного массива в обратном порядке
Реализовать функцию копирования элементов первого массива во второй в обратном порядке. C++
C++ Написать на С++ функцию, переставляющую в обратном порядке элементы в односвязном списке
C++ Сделать шаблонную функцию массива перестановка элементов в обратном порядке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.04.2013, 10:29     Изменить функцию в обратном порядке #2
C++
1
byte |= 1 << i;
эквивалент:
C++
1
byte = byte | 1 << i; // Сдвигаем 1 влево на i, выполняем "или" с byte и результат записываем в byte.
Обратная функция:
C++
1
2
3
4
5
6
7
8
9
10
11
std::vector<bool> reb( uint8_t byte )
{
    std::vector<bool> res;
 
    for( int i=0; i<8; ++i )
    {
        res.push_back( byte >> i & 1 );
    }
 
    return res;
}
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 11:33  [ТС]     Изменить функцию в обратном порядке #3
Цитата Сообщение от Tulosba Посмотреть сообщение
C++
1
byte |= 1 << i;
эквивалент:
C++
1
byte = byte | 1 << i; // Сдвигаем 1 влево на i, выполняем "или" с byte и результат записываем в byte.
Обратная функция:
C++
1
2
3
4
5
6
7
8
9
10
11
std::vector<bool> reb( uint8_t byte )
{
    std::vector<bool> res;
 
    for( int i=0; i<8; ++i )
    {
        res.push_back( byte >> i & 1 );
    }
 
    return res;
}
а что значит ключевое слово (uint8_t) и можете сказать "сдвигаем 1" это подразумевается один элемент или как символ?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.04.2013, 11:38     Изменить функцию в обратном порядке #4
Цитата Сообщение от Мишутка1 Посмотреть сообщение
а что значит ключевое слово (uint8_t)
uint8_t - это целый беззнаковый тип, который содержит 8 бит (определен в файле cstdint). Использовать char для Ваших целей не очень правильно, т.к. char - это в первую очередь символ, а не просто байт.
Цитата Сообщение от Мишутка1 Посмотреть сообщение
"сдвигаем 1"
берем число 1 (00000001) и сдвигаем влево битовое представление числа, получаем (00000010) 2.
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 11:41  [ТС]     Изменить функцию в обратном порядке #5
Цитата Сообщение от Tulosba Посмотреть сообщение
uint8_t - это целый беззнаковый тип, который содержит 8 бит (определен в файле cstdint). Использовать char для Ваших целей не очень правильно, т.к. char - это в первую очередь символ, а не просто байт.

берем число 1 (00000001) и сдвигаем влево битовое представление числа, получаем (00000010) 2.
я вот собираюсь заново изучать типы данных, так как я с самого начала не до понимаю. В памяти же ведь все типы занимают определенное число байт, т. е. бит, как тогда определяется что в этих ячейках записан символ, или записано число с плавающей точкой. От этого понимания я далёк.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.04.2013, 11:53     Изменить функцию в обратном порядке #6
Цитата Сообщение от Мишутка1 Посмотреть сообщение
как тогда определяется что в этих ячейках записан символ, или записано число с плавающей точкой.
В языке С++ используется строгая типизация данных, если Вы объявили что-то как символ, оно будет интерпретироваться как символ. Другое дело, что могут быть явные и неявные преобразования, но это уже совсем другая история.
Мишутка1
0 / 0 / 0
Регистрация: 24.04.2013
Сообщений: 47
26.04.2013, 11:55  [ТС]     Изменить функцию в обратном порядке #7
Цитата Сообщение от Tulosba Посмотреть сообщение
В языке С++ используется строгая типизация данных, если Вы объявили что-то как символ, оно будет интерпретироваться как символ. Другое дело, что могут быть явные и неявные преобразования, но это уже совсем другая история.
препода говорят наоборот, нет никакого символа есть только 0 и 1. Это тоже самое куда течёт ток. Ну ладно думаю это тема бесконечная и вам мне это не объяснить. Спасибо за функцию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 11:59     Изменить функцию в обратном порядке
Еще ссылки по теме:

C++ Составить и проверить функцию, которая переставляет цифры заданного целого числа N1 в обратном порядке и получает новое число N2
Разработать функцию, которая переставляет в обратном порядке цифры заданного долгого целого числа C++
Изменить заданный числовой массив так, чтобы элементы были расположены в нем в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.04.2013, 11:59     Изменить функцию в обратном порядке #8
Цитата Сообщение от Мишутка1 Посмотреть сообщение
нет никакого символа есть только 0 и 1.
можно продолжить и сказать, что нет 0 и 1, а есть только сигнал или его отсутствие.
Что есть, а чего нет, зависит от уровня абстракции.
Yandex
Объявления
26.04.2013, 11:59     Изменить функцию в обратном порядке
Ответ Создать тему
Опции темы

Текущее время: 12:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru