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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
#1

Сравнение байтов в bitset - C++

12.11.2013, 23:15. Просмотров 1906. Ответов 25
Метки нет (Все метки)

Помогите написать функцию, которая сравнивает байты (а точнее первые 3 бита в каждом байте bitset<32>)
Просто кроме, как кейсом, ничего в голову не приходит. Получается очень громоздко. В идеальном варианте, надо расположить байты по возрастанию, одинаковые оставить на месте. Но мне, пока что нужна только функция сравнения этих байтов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 23:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сравнение байтов в bitset (C++):

Bitset<0> - C++
Не на англоязычных просторах ни на наших не нашел, что же означает определение как: bitset&lt;0&gt; Моё предположение, это очищенный...

Bitset to int - C++
Здравствуйте! вот пробую: bitset &lt;8&gt; id_paketa = 00000010; cout &lt;&lt; id_paketa &lt;&lt; &quot; &quot; &lt;&lt; id_paketa.to_ullong(); Почему получается...

Задача по bitset - C++
Задача: Предположим, что существует последовательность 1,2,3,5,8,13,21. Инициализируйте набор bitset&lt;32&gt; так, чтобы в каждой из позиций,...

Запись bitset в bmp - C++
Всем доброго времени суток, такая проблемка, не могу записать bitset в bmp вроде нашел пример и структуру файла, но рук не хватает ещё)). ...

внести char* в bitset - C++
Всем привет! Хотел бы попросить у вас эффективный способ каким образом можно внести массив символов переменной длины (char buf)...

Аналог класса bitset (Стандарт C++11) - C++
Нужно создать аналог класса Bitset (стандарт C++11) Самому удалось раскопать следующее: //default (1) constexpr bitset()...

25
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
13.11.2013, 23:11  [ТС] #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <bitset>
using namespace std;
 
bitset<32> converter(unsigned int);
 
 
int main()
{
    unsigned int in=12345678;
    converter(in);
    system("PAUSE");
    return 0;
}
 
 
bitset<32> converter(unsigned int ab)
{
    bitset<32> inbit=bitset<32>(ab);
return 0;
}
Даже банально, такой код не работает
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
13.11.2013, 23:16 #17
C++
1
2
3
4
5
6
7
#include <bitset>
 
int main()
{
    std::bitset<32> bits(12345678);
    return 0;
}
0
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
13.11.2013, 23:26  [ТС] #18
ну о чём я говорил, мне через переменную, которую я с клавиатуры вводить буду надо инициализировать битсет.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2013, 23:39 #19
Ты же сам говорил про тип unsigned long, а используешь unsigned int.
1
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
13.11.2013, 23:48  [ТС] #20
Цитата Сообщение от castaway Посмотреть сообщение
Ты же сам говорил про тип unsigned long, а используешь unsigned int.
Ну вообще то, это в большинстве компиляторов одно и то же, так как в последних стандартах языка c++ long~int. Это раньше int бралось как shot. Тем не менее, даже если бы была разница сейчас, то на положение дел это никак не повлияло.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2013, 23:53 #21
Код из 16-го поста не работает потому что тебе надо возвратить объект класса bitset, а ты возвращаешь 0, т.е. целый тип.
Логика хоть как то должна работать?
0
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
13.11.2013, 23:56  [ТС] #22
Цитата Сообщение от castaway Посмотреть сообщение
Код из 16-го поста не работает потому что тебе надо возвратить объект класса bitset, а ты возвращаешь 0, т.е. целый тип.
Логика хоть как то должна работать?
И опять же ты не прав.
а) Этот код прекрасно работает, если мы берём скажем просто int.
б) чем тебе 0 не является bitset'ом? Как бы там 0 и 1 встречаются частенько. И они могут быть bitset'ом


Ругается же вот на что
Кликните здесь для просмотра всего текста
error C2440: <function-style-cast>: невозможно преобразовать "unsigned long" в "std::bitset<_Bits>"
1> with
1> [
1> _Bits=32
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
0
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
14.11.2013, 02:17  [ТС] #23
Ну а если по теме, то может кто подсказать?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7419 / 4534 / 673
Регистрация: 29.11.2010
Сообщений: 12,304
14.11.2013, 02:49 #24
Цитата Сообщение от Dread1 Посмотреть сообщение
Ну а если по теме, то может кто подсказать?
int это не только 0 и 1, это еще и 2, 3, 4, -1, -2, -3, ...
А бит может иметь значение 0 или 1, как впрочем и двоичная запись числа. Вы пытаетесь инициализировать двоичное число десятеричным, т.е. нолики и единицы чем попало.
Это сродню "Почему бы числа не инициализировать символами, ведь символы могут быть числами".
Почитайте доку: http://www.cplusplus.com/reference/bitset/bitset/ там и примеры есть. Особенно про конструктор.

Джентльмены, можно было просто тактично промолчать.
0
Dread1
7 / 7 / 2
Регистрация: 16.10.2012
Сообщений: 61
14.11.2013, 03:08  [ТС] #25
А по делу: 1)В данной ситуации ну совсем не важно что у нас возвратит функция, потому что дело с возвращающим моментом я тут не имею, ну не нужно мне в данном случае что то возвращать. Так что можно и void сделать
2) там нету про инициализацию переменной типо unsigned long
3) Проблему решил:
a) это проблема ms visual c++ 2010. В нём так же можно использовать unsigned long long и всё будет работать
б) использовав всё, как было задумано codeblocks легко компилирует и запускает данный код.

Не по теме:

А свои неуместные комментарии лучше при себе оставляйте, чем писать кому то в тему. (castaway и Avazart, обращаюсь именно к вам)

0
MrGluck
Модератор
Эксперт CЭксперт С++
7419 / 4534 / 673
Регистрация: 29.11.2010
Сообщений: 12,304
14.11.2013, 03:21 #26
Цитата Сообщение от Dread1 Посмотреть сообщение
a) это проблема ms visual c++ 2010. В нём так же можно использовать unsigned long long и всё будет работать
unsigned long long это не проблема ms, да и вообще не проблема. На доке, что я вам дал, явно указан вариант перегруженного конструктора с данным типом в качестве параметра.

Добавлено через 3 минуты
Цитата Сообщение от Dread1 Посмотреть сообщение
А свои неуместные комментарии лучше при себе оставляйте, чем писать кому то в тему. (castaway и Avazart, обращаюсь именно к вам)
до этого они говорили по делу (Avazart вообще больше всех в этой теме писал), просто вы это не воспринимали, тем самым спровоцировав порцию комплиментов в свой адрес относительно умственных способностей.

Добавлено через 4 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
int это не только 0 и 1, это еще и 2, 3, 4, -1, -2, -3, ...
А бит может иметь значение 0 или 1, как впрочем и двоичная запись числа. Вы пытаетесь инициализировать двоичное число десятеричным, т.е. нолики и единицы чем попало.
Это сродню "Почему бы числа не инициализировать символами, ведь символы могут быть числами".
один большой self-fail.
0
14.11.2013, 03:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2013, 03:21
Привет! Вот еще темы с ответами:

Множество элементов типа bitset - C++
Хочу создать множество, элементы которого будут иметь тип bitset. Подключаю #include &lt;set&gt; и #include &lt;bitset&gt; Пишу например так ...

Динамический bitset, возможно ли такое? - C++
как известно size в bitset&lt;size&gt; должно быть статической, как реализовать класс с полем bitset&lt;size&gt; в конструктор\параметр которого...

Почему не получается использовать bitset в VC++? - C++
Никак не получается использовать bitset в VC++6 . Очень надо - двоичный вектор . В стандарте описан bitset , но работать отказывается ....

Bitset<8388608> - Stack overflow - C++
Пишу: bitset&lt;8388608&gt; hash; // (256^2)/2 Ошибка: Stakc overflow (ОЗУ&gt;3 Гб, но как я понял приложение не может пользоваться больше...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru