Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> bitset, Как конкатенировать bitset 
:(
    Опции темы
CWD
Дата 8.3.2013, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



Добрый день возник вопрос. Если есть один набор битов a=01010011 и второй b=01000001, как из них сделать bitset<16> с=0101001101000001. И потом перевести в десятичную систему?
Код

#include <stdio.h>
#include <iostream>
#include <bitset>
using namespace std;

 
int main()
{
    bitset<8> a=01010011;
    bitset<8> b=01000001;

    cout << a << " " << b << endl;

    return 0;
}

PM MAIL   Вверх
volatile
Дата 9.3.2013, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(CWD @  8.3.2013,  20:52 Найти цитируемый пост)
   bitset<8> a=01010011;
    bitset<8> b=01000001;

походу, у вас эта операция делает не то что вам кажецца.
PM MAIL   Вверх
CWD
Дата 9.3.2013, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



volatile, Да это было действительно так.
Код

bitset<8> a=(int)'S';
bitset<8> b=(int)'A';
 

Вроде бы работает так как надо, но опять как их объединить?
PM MAIL   Вверх
volatile
Дата 9.3.2013, 09:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(CWD @  9.3.2013,  00:50 Найти цитируемый пост)
как их объединить? 

Первый способ 
Код

bitset<16> с ((a.to_ulong () << 8) | b.to_ulong ());
cout << с << endl;

Второй способ
Код

bitset<16> c (a.to_string () + b.to_string ());
cout << c << endl;


CWD, bitset, имхо, задумывался немножко не для таких операций, какие вы хотите применять.
bitset - это набор флагов, а вы хотите использовать его как длинное число, применять к нему операции арифметики.
Это не самое оптимальное применение битсета.


PM MAIL   Вверх
CWD
Дата 13.3.2013, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 26.11.2011

Репутация: нет
Всего: нет



volatile, Спасибо.

А что можно использовать вместо? Обратился к boost, а именно dynamic_bitset, там нет альтернативы bitset<8> a=(int)'S';. И придется писать функцию которая будет заносить двоичное представление символа в переменную.
PM MAIL   Вверх
math64
Дата 13.3.2013, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Код

enum { BIN_0000, BIN_0001, ..., BIN_1111 };
#define BIN4(a) BIN_##a
#define BIN8(a,b) ((BIN4(a) << 4) | BIN4(b))
#define BIN16(a,b,c,d) ((BIN8(a,b) << 8) | BIN8(c,d))
#define BIN32(a,b,c,d,e,f,g,h) ((BIN16(a,b,c,d) << 16) | BIN16(e,f,g,h))


Это сообщение отредактировал(а) math64 - 13.3.2013, 07:41
PM   Вверх
math64
Дата 13.3.2013, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



delete message

Это сообщение отредактировал(а) math64 - 13.3.2013, 07:35
PM   Вверх
volatile
Дата 13.3.2013, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



CWD, а какие операции вы хотите вообще с ними делать?

имхо, если достаточно 64 битов, лучше вообще все делать в обычных целых: инт, лонг лонг и т.д. 
а в двоичный вид переводить только во время вывода пользователю.
для двоичного вывода можно использовать тотже битсет
(там он будет более приемлем.)



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2026 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.