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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.84
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
#1

Битовые операции - C++

02.06.2009, 19:51. Просмотров 10151. Ответов 23
Метки нет (Все метки)

Дано задание : Ввести последовательность из 8-ми символов. Если сумма единиц в представлении символа нечетная, то заменить 2 старших бита нулями, иначе - единицами. Вывести исходную последовательность и её восьмеричные коды; преобразованную последовательность и её восьмеричные коды.

Собственно вопрос возникает как вывести восьмеричный код элемента, и двоичный код элемента что бы потом можно было посчитать количество единиц в бинарном коде каждого элемента и в зависимости от результата(чет\нечет) сделать замену старших битов.

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2009, 19:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Битовые операции (C++):

Битовые операции, битовые поля. - C++
Здравствуйте! Еслть 4 диапазона чисел: 0-100, 0-100, 0-6000, 0-3. Сделать в виде битовых операций. Записать в unsigned int. Использовать...

Битовые операции и операции смещения языка С - C++
Доброго времени суток господа,помогите пожалуйста.Есть 2 кода к задаче,первый работает верно(переводит обычные числа в 16-ти ричные),а...

Битовые операции - C++
помогите написать программу в консоли... я вообще не знаю эту тему и не знаю ка делать... вот, задача.. Создайте программу,...

Битовые операции - C++
Не могу разобраться с 4 заданием Реализовал пятое но не в одну строчку и без понятия как сделать в одну П.5.18.Правил Запрещено...

битовые операции - C++
надо написать ф-цию, которая в данном числе(в двоичной с.с.) на заданном номере ставила 1, вместо 0

Битовые операции - C++
Имеется число int x = 85; // 1010101 - двоичное представление // 6543210 - номера битов // нужно взять // 0,2,3,4 биты и сложить...

23
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 20:49 #2
Вот примерчик небольшой:
C
1
2
3
4
5
6
7
8
9
10
   char a = -90, j=0;
   for(j=0;j<8;j++)
   {
      char s = a&0b10000000;
      if(s)
         printf("1");
      else
         printf("0");
      a = a<<1;
   }
Char у меня на системе один байт )), поэтому он выведет его двоичное представление. Собственно, как сделать свое задание ты должен додумать сам. Это всего лишь подсказка.
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,594
Записей в блоге: 28
02.06.2009, 20:58 #3
Вообще-то в Си нету встроенной возможности задавать константы в двоичном предсталвнии, а потому "char s = a&0b10000000;" надо заменить на "char s = a & 0x80;"
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
02.06.2009, 21:03 #4
reitar,
... Собственно вопрос возникает как вывести восьмеричный код элемента ...
... посчитать количество единиц ...
... сделать замену старших битов ...

std::bitset тебе поможет
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:05 #5
Цитата Сообщение от Evg Посмотреть сообщение
Вообще-то в Си нету встроенной возможности задавать константы в двоичном предсталвнии, а потому "char s = a&0b10000000;" надо заменить на "char s = a & 0x80;"
Я это сделал для наглядности. Да и гсс скомпильнет.
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,594
Записей в блоге: 28
02.06.2009, 21:10 #6
Цитата Сообщение от Vourhey Посмотреть сообщение
Я это сделал для наглядности. Да и гсс скомпильнет.
Ну начинающий пример для наглядности врядли поймёт. А gcc-4.2.4 у меня не ест
a.c:8:18: error: invalid suffix "b10000000" on integer constant

Добавлено через 1 минуту 35 секунд
Цитата Сообщение от Rififi Посмотреть сообщение
std::bitset тебе поможет
Что-то какое-то нехорошее чувство мне подсказывает, что преподавателя такой вариант не устроит. В задачу входит проверка понимания того, как вообще работать с битовыми значениями, а потому вариант с библиотечными реализациями лучше не писать - меньше вероятность пролететь на зачёте
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:18 #7
Ну начинающий пример для наглядности врядли поймёт. А gcc-4.2.4 у меня не ест
Я не собираюсь под каждого начинающего подстраиваться. Что будет у него компиляться, что нет. Мне до лампочки. Если у него голова есть на плечах. И если его компилер это не проглотит, то он найдет, как исправить эту ошибку. На стандарты я также плевал ввиду того, что компилятору верю больше, чем любому стандарту где бы не описанному.
Ничто мне не мешало написать в шестнадцатиричной форме, десятичной и вообще символом чар. Вопрос: на хрен? Я пишу так, как мне удобно. Программа работает? Работает. Идея ясна? Ясна. Все. Я пишу для форума, а не для сверх-устойчивой секретной программы Джеймса Бонда. Расслабься, включи мозги.

Добавлено через 3 минуты 4 секунды
И перестань трястись над студентами. Пусть думают своей головой в том числе, а не на блюдечке все получают.

gcc (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]
спокойно хавает, так что, свой код я менять и не собираюсь я за 0b10000000, мне так удобней, наглядней и нравится больше. Портировать свой код на другие компилеры я не собираюсь, поэтому менять на другой формат тоже не собираюсь. Хочешь - хоть десять способов напиши. Одна фигня, ниче не изменится.
0
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:22  [ТС] #8
Если чесно то я не очень понял сам пример ибо знаю С++ тока 5-ый день, а пример как я понял на просто С.
Скажите можно ли просто вывести бинарный код элемента "a" например? я где то видел что выводили в восьмеричной системе с помошью добавки "oct" строка была примерно следующая cout<<a<<oct; Можно ли выводить так , но меняя в зависимости от надобности систему счисленая на dec , bin или hex. И еще вопрос нельзя ли как либо на С++ сравнить количествое единиц и нолей между символами не выводя их бинарные коды для последующего сравнения?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:30 #9
Вывести-то можно. Именно так, как ты выше написал. А подсчитать количество единиц можно, как в примере выше, но вместо вывода, просто считай в переменной и все.
Ну раз не очень понял, то поднапряги извилины, почитай про битовый &

Добавлено через 54 секунды
Это можно не понять по причине не знания что такое & и << почитай в инете. Если что-то про это будет не ясно - спрашивай. Только сначала сам попробуй.
0
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:32  [ТС] #10
мне нужен был только вывод , как посчитать единицы , сравнить их количество и как в зависимости от результата заменить старшие биты я и так знаю =)
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:34 #11
Тогда лови
http://cplus.about.com/od/learning1/ss/clessontwo_4.htm
0
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:54  [ТС] #12
Спасибо.
Посмотрел по ссылке примеры там показан пример :
C++
1
2
3
4
5
6
7
cout.unsetf(ios::uppercase) ;
cout << hex << endl;
cout << 1234 << endl;
cout << oct << endl;
cout << 1234 << endl;
cout << dec << endl;
cout << 1234 << endl;
но он переводит только цифры.
C++
1
2
3
4
5
6
7
8
9
10
11
12
{
char r;
cin>>r;
cout.unsetf(ios::uppercase) ;
cout << hex << endl;
cout << r << endl;
cout << oct << endl;
cout << r << endl;
cout << dec << endl;
cout << r << endl;
getch();
}
а мне надо чтоб он переводил и символьное значение, т.е. если я запустив код сверху ввожу "a", то следовало бы ожидать от него не месте шестнадцатиричной системы все то же "a" на месте восьмеричной 12 , на месте десятеричной 10, а на месте двоичной 1010. однако он просто выводит мне то что я ввел =( возможно ли вообще то что я пишу, этим простым способом?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 22:11 #13
C++
1
2
3
cout <<hex<<(int)r<< endl;
cout <<oct<<(int)r<< endl;
cout <<dec<<(int)r << endl;
Что-то наподобие.
0
Evg
Эксперт CАвтор FAQ
18241 / 6366 / 435
Регистрация: 30.03.2009
Сообщений: 17,594
Записей в блоге: 28
02.06.2009, 22:17 #14
Или вместо "char r" использовать "int r". Эта хрень судя по всему char трактует именно как символ, а не как числовое значение
0
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 22:22  [ТС] #15
Спасибо , подскажите теперь , что надо поставить вместо cout <<dec<<(int)r << endl; для двоичной , bin ,binary к сожелению не поlходит , или возможно надо какую то из библиотек подключить ?
0
02.06.2009, 22:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2009, 22:22
Привет! Вот еще темы с ответами:

Битовые операции - C++
Ребят, нужен алгоритм, а желательно и код для реализации следующей функции: Есть скажем числа от 0 до 7, т.е. 8 (2^3) Теперь...

Битовые операции - C++
Ребят, помогите кто чем может. Дана строка unsigned char. Необходимо через каждых 4 бита вставить 1, при этом ничего не затерев. ...

Битовые операции - C++
Вот такая вот лаба на С, уже как не думал ну не могу решить я ее. Прошу помочь, прикрепил полное задание с примером работы(в примере...

Битовые операции - C++
Здравствуйте! нужно решить задачу: в целом числе заменить младший бит старшего байта на 1 решается ли это битовыми сдвигами? и...


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

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

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