Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2014, 17:52   #1
Kseni564
Пользователь
 
Регистрация: 04.05.2014
Сообщений: 14
По умолчанию с++ побитовые операторы. Помогите с программой

Не получается никак! Особенно вывести в двоичной системе само число х и инвертированное значение.
Напишите программу invert(p,x,n), возвращающую значение х с инвертированными n-битами, начиная с позиции p ( остальные биты не меняются).
Подскажите пожалуйста!
Kseni564 вне форума Ответить с цитированием
Старый 04.05.2014, 18:03   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Что удалось сделать самостоятельно? Выкладывайте, посмотрим.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 05.05.2014, 17:57   #3
Kseni564
Пользователь
 
Регистрация: 04.05.2014
Сообщений: 14
По умолчанию

unsigned x( unsigned x, int p, int n){
x>>(p+1-n)&~(~0<<n);
return x;}
int main(){
unsigned x;
int p,n;
cout<<"Введите х в шестнадцатеричной: ";
cin>>hex>>x;
cout<<"Введите р и число инвертированных битов n ";
cin>>dec>>p>>n;
cout<<"Инвертированное х ";
printf("%d", invert(x,p,n));
getch();
}
Вот то, что я смогла написать.
Вы обещали помочь-"Выкладывайте, посмотрим.")))
Пожалуйста!)
Kseni564 вне форума Ответить с цитированием
Старый 05.05.2014, 18:05   #4
Kseni564
Пользователь
 
Регистрация: 04.05.2014
Сообщений: 14
По умолчанию

unsigned x( unsigned x, int p, int n){
x>>(p+1-n)&~(~0<<n);
return x;}
int main(){
unsigned x;
int p,n;
cout<<"Введите х в шестнадцатеричной: ";
cin>>hex>>x;
cout<<"Введите р и число инвертированных битов n ";
cin>>dec>>p>>n;
cout<<"Инвертированное х ";
printf("%d", invert(x,p,n));
getch();
}
Вот то, что я смогла написать.
Вы обещали помочь-"Выкладывайте, посмотрим.")))
Пожалуйста!)
Kseni564 вне форума Ответить с цитированием
Старый 05.05.2014, 18:27   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Скорее всего, есть и более изящные способы инвертировать выбранный бит.
UPD Добавил более прикольный вариант инвертирования.
Код:
#include <iostream>
#include <bitset>
using namespace std;

/*unsigned
invert(unsigned x, int p, int n)
{
    int count = sizeof(x) * 8;
    for (int i = count - p - n + 1; i <= count - p; ++i) {
        int t = (1 - (x >> i) & 1) << i;
        x &= ~(1 << i);
        x |= t;
    }
    return x;
}*/

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;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 05.05.2014 в 18:45.
BDA вне форума Ответить с цитированием
Старый 05.05.2014, 19:06   #6
Kseni564
Пользователь
 
Регистрация: 04.05.2014
Сообщений: 14
По умолчанию

Огромное спасибо!!!
Kseni564 вне форума Ответить с цитированием
Старый 05.05.2014, 23:10   #7
Kseni564
Пользователь
 
Регистрация: 04.05.2014
Сообщений: 14
По умолчанию

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

В чем дело? Подскажите
Kseni564 вне форума Ответить с цитированием
Старый 05.05.2014, 23:26   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Каким компилятором пользуетесь?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 06.05.2014, 07:16   #9
Kseni564
Пользователь
 
Регистрация: 04.05.2014
Сообщений: 14
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Каким компилятором пользуетесь?
Microsoft Visual C++ Express 2010
Kseni564 вне форума Ответить с цитированием
Старый 06.05.2014, 20:54   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

К сожалению, не знаю, как избавиться от ошибки. В Visual Studio 2012 и ideone.com ошибка не возникает.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Побитовые операторы Trampcher Visual C++ 1 12.06.2013 12:27
Побитовые операторы PHP в Delphi AET Общие вопросы Delphi 3 23.11.2012 20:26
Проблема с программой. Побитовые операторы. Си. Chelovekpredel Помощь студентам 2 10.06.2012 18:07
Побитовые операторы (number && + number | 0 || 0) Викдон JavaScript, Ajax 0 05.10.2011 20:34
помогите разобраться(условные операторы) k1real Паскаль, Turbo Pascal, PascalABC.NET 10 04.11.2008 05:00