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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в коде из-за bitset, Необходимо найти ошибку 
:(
    Опции темы
Kseni1995
Дата 6.5.2014, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не работает программа! Задание было такое: напишите программу invert(p,x,n), возвращающую значение х с инвертированными n-битами, начиная с позиции p ( остальные биты не меняются).

Ввожу, подчеркивает bitset при выводе и выдает такую ошибку: 
]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1> error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
1> with
1> [
1> _Bits=32
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно.

Мой код:

Код

#include <iostream>
#include <bitset>
using namespace std;
unsigned
invert(unsigned x, int p, int n)
{
    int count = sizeof(x) * 8;
    unsigned t = ((unsigned) ~0 << (p - 1)) >> (count - n) << (count - n - p + 1);
    return (~x & t) | (x & ~t);
}
 
int
main()
{
    unsigned x;
    int p, n;
    cout << "Введите x в шестнадцатеричной: ";
    cin >> hex >> x;
    cout << "Введите p позицию и число инвертированных битов n ";
    cin >> dec >> p >> n;
    cout << "Исходный x " << bitset<sizeof(x) * 8>(x) << endl
         << "Инвертированный x " << bitset<sizeof(x) * 8>(invert(x, p, n)) << endl;
    return 0;
}
Подскажите пожалуйста, в чем дело?

PM MAIL   Вверх
Guinness
Дата 6.5.2014, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://ideone.com/fxM6Go - тут вроде все компилируется.
В чем работаем, чем компилиурем?
PM MAIL   Вверх
xvr
Дата 6.5.2014, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Функция invert просто жуть! И маска вычисляется гораздо проще (в 3 операции, а не в 9), а уж результат вообще вычисляется в одну операцию (а не в 5).

PM MAIL   Вверх
Kseni1995
Дата 6.5.2014, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Guinness @ 6.5.2014,  13:10)
http://ideone.com/fxM6Go - тут вроде все компилируется.
В чем работаем, чем компилируем?


Microsoft Visual C++ 2010 Express
Там действительно все вроде так, спасибо!

Добавлено через 1 минуту и 27 секунд
Цитата(xvr @ 6.5.2014,  13:18)
Функция invert просто жуть! И маска вычисляется гораздо проще (в 3 операции, а не в 9), а уж результат вообще вычисляется в одну операцию (а не в 5).

А как нужно?
PM MAIL   Вверх
xvr
Дата 6.5.2014, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Kseni1995 @  6.5.2014,  13:40 Найти цитируемый пост)
А как нужно? 

Код

unsigned
invert(unsigned x, int p, int n)
{
    unsigned t =  ((1<<n)-1)<<p;
    return x ^ t;
}


PM MAIL   Вверх
Kseni1995
Дата 6.5.2014, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(xvr @ 6.5.2014,  13:50)
Цитата(Kseni1995 @  6.5.2014,  13:40 Найти цитируемый пост)
А как нужно? 

Код

unsigned
invert(unsigned x, int p, int n)
{
    unsigned t =  ((1<<n)-1)<<p;
    return x ^ t;
}

Спасибо! Действительно проще
PM MAIL   Вверх
feodorv
Дата 9.5.2014, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



xvr,  smile 
Не сочтите за троллинг, но если мне захочется все биты инвертировать? 
Код

invert(0xffffffffu, 0, 32)

в 32-х битном окружении уже нехорошо будет...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
xvr
Дата 9.5.2014, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(feodorv @  9.5.2014,  09:13 Найти цитируемый пост)
Не сочтите за троллинг, но если мне захочется все биты инвертировать? 

Да, это проблема. Надо будет предусмотреть этот частный случай  smile 
PM MAIL   Вверх
mes
Дата 10.5.2014, 11:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(xvr @  9.5.2014,  08:19 Найти цитируемый пост)
Да, это проблема. Надо будет предусмотреть этот частный случай

или инвертирoвать лoгику smile
Код

  enum  { maxbits = sizeof(unsigned) *8 };
  unsigned int t = (-1u) >> (maxbits-n) << p;
  return x ^ t;


Это сообщение отредактировал(а) mes - 10.5.2014, 11:25


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

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

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

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

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


 




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


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

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