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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 81, средняя оценка - 4.84
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 19:51     Битовые операции #1
Дано задание : Ввести последовательность из 8-ми символов. Если сумма единиц в представлении символа нечетная, то заменить 2 старших бита нулями, иначе - единицами. Вывести исходную последовательность и её восьмеричные коды; преобразованную последовательность и её восьмеричные коды.

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

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2009, 19:51     Битовые операции
Посмотрите здесь:

битовые операции C++
Битовые операции C++
Битовые операции C++
Битовые операции, битовые поля. C++
Битовые операции C++
Битовые операции C++
C++ Битовые операции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6470 / 2245 / 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 у меня на системе один байт )), поэтому он выведет его двоичное представление. Собственно, как сделать свое задание ты должен додумать сам. Это всего лишь подсказка.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,363
Записей в блоге: 26
02.06.2009, 20:58     Битовые операции #3
Вообще-то в Си нету встроенной возможности задавать константы в двоичном предсталвнии, а потому "char s = a&0b10000000;" надо заменить на "char s = a & 0x80;"
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
02.06.2009, 21:03     Битовые операции #4
reitar,
... Собственно вопрос возникает как вывести восьмеричный код элемента ...
... посчитать количество единиц ...
... сделать замену старших битов ...

std::bitset тебе поможет
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:05     Битовые операции #5
Цитата Сообщение от Evg Посмотреть сообщение
Вообще-то в Си нету встроенной возможности задавать константы в двоичном предсталвнии, а потому "char s = a&0b10000000;" надо заменить на "char s = a & 0x80;"
Я это сделал для наглядности. Да и гсс скомпильнет.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,363
Записей в блоге: 26
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 тебе поможет
Что-то какое-то нехорошее чувство мне подсказывает, что преподавателя такой вариант не устроит. В задачу входит проверка понимания того, как вообще работать с битовыми значениями, а потому вариант с библиотечными реализациями лучше не писать - меньше вероятность пролететь на зачёте
Vourhey
Почетный модератор
6470 / 2245 / 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, мне так удобней, наглядней и нравится больше. Портировать свой код на другие компилеры я не собираюсь, поэтому менять на другой формат тоже не собираюсь. Хочешь - хоть десять способов напиши. Одна фигня, ниче не изменится.
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:22  [ТС]     Битовые операции #8
Если чесно то я не очень понял сам пример ибо знаю С++ тока 5-ый день, а пример как я понял на просто С.
Скажите можно ли просто вывести бинарный код элемента "a" например? я где то видел что выводили в восьмеричной системе с помошью добавки "oct" строка была примерно следующая cout<<a<<oct; Можно ли выводить так , но меняя в зависимости от надобности систему счисленая на dec , bin или hex. И еще вопрос нельзя ли как либо на С++ сравнить количествое единиц и нолей между символами не выводя их бинарные коды для последующего сравнения?
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:30     Битовые операции #9
Вывести-то можно. Именно так, как ты выше написал. А подсчитать количество единиц можно, как в примере выше, но вместо вывода, просто считай в переменной и все.
Ну раз не очень понял, то поднапряги извилины, почитай про битовый &

Добавлено через 54 секунды
Это можно не понять по причине не знания что такое & и << почитай в инете. Если что-то про это будет не ясно - спрашивай. Только сначала сам попробуй.
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:32  [ТС]     Битовые операции #10
мне нужен был только вывод , как посчитать единицы , сравнить их количество и как в зависимости от результата заменить старшие биты я и так знаю =)
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.06.2009, 21:34     Битовые операции #11
Тогда лови
http://cplus.about.com/od/learning1/ss/clessontwo_4.htm
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. однако он просто выводит мне то что я ввел =( возможно ли вообще то что я пишу, этим простым способом?
Vourhey
Почетный модератор
6470 / 2245 / 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;
Что-то наподобие.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,363
Записей в блоге: 26
02.06.2009, 22:17     Битовые операции #14
Или вместо "char r" использовать "int r". Эта хрень судя по всему char трактует именно как символ, а не как числовое значение
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 22:22  [ТС]     Битовые операции #15
Спасибо , подскажите теперь , что надо поставить вместо cout <<dec<<(int)r << endl; для двоичной , bin ,binary к сожелению не поlходит , или возможно надо какую то из библиотек подключить ?
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.06.2009, 00:43     Битовые операции #16
Не, библиотеки тебе не помогут . Ты должен этот вывод сделать ручками. Попробуй.
reitar
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
03.06.2009, 00:46  [ТС]     Битовые операции #17
чтож , спасибо , будем думать =)
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
03.06.2009, 00:59     Битовые операции #18
reitar,
C++
1
for(int i = 7, a = -90; i >= 0; i--)cout << (a >> i & 0x1);
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16937 / 5342 / 328
Регистрация: 30.03.2009
Сообщений: 14,363
Записей в блоге: 26
03.06.2009, 09:41     Битовые операции #19
Цитата Сообщение от Vourhey Посмотреть сообщение
Не, библиотеки тебе не помогут
Сие мне никогда понятно не было. Почему разработчики языка предусмотрели наличие в языке возможности задать константу в 16-ричном и 8-ричном написании (причём последнее сделано откровенно через ж$пу), а так же в требования к окружению выставили печать значения в этих представлениях, но положили на двоичное представление.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2009, 12:52     Битовые операции
Еще ссылки по теме:

битовые операции C++
Битовые операции и операции смещения языка С C++
Битовые операции C++
Битовые операции C++
C++ Битовые операции

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

Или воспользуйтесь поиском по форуму:
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
03.06.2009, 12:52     Битовые операции #20
Evg,
Цитата Сообщение от Evg Посмотреть сообщение
разработчики
стремились, что бы
Цитата Сообщение от Evg Посмотреть сообщение
никогда понятно не было Сие
Всем!
А как ты это поймешь, им наплевать!
Точнее не в их интересах!!! Рыбные места выдавать!
Работа у них такая! У
Цитата Сообщение от Evg Посмотреть сообщение
разработчиков языка
Цитата Сообщение от mirso Посмотреть сообщение
Денюшки, деньги, бабосы!
Может я и заблуждаюсь, но с бинарными полями через в union- волокита еще та!!!

Добавлено через 25 минут 29 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//-------------------------------------------------
#include "iostream.h"
#include "conio.h"
 
main()
{
union
{
    //--------------------------------------------------------------------------
    struct   
    {
        bool b_numberF : 1;
        bool b_numberE : 1; 
        bool b_numberD : 1;
        bool b_numberC : 1;
        bool b_numberB : 1;
        bool b_numberA : 1;
        bool b_number9 : 1;
        bool b_number8 : 1;
        bool b_number7 : 1;
        bool b_number6 : 1;
        bool b_number5 : 1;
        bool b_number4 : 1;
        bool b_number3 : 1;
        bool b_number2 : 1;
        bool b_number1 : 1;
        bool b_number0 : 1;
    }bin;
    //----------------------
    unsigned short d_number;
    //----------------------
};
//------------------------------------------------
 
    puts("Chislo vvedi! Da!\n");
    scanf("%d", &d_number);
 
    printf("\n u_short = %d, bin16 = %d%d%d%d% d%d%d%d %d%d%d%d% d%d%d%d;",
            d_number, bin.b_number0,
                      bin.b_number1,
                      bin.b_number2,
                      bin.b_number3,
                      bin.b_number4,
                      bin.b_number5,
                      bin.b_number6,
                      bin.b_number7,
                      bin.b_number8,
                      bin.b_number9,
                      bin.b_numberA,
                      bin.b_numberB,
                      bin.b_numberC,
                      bin.b_numberD,
                      bin.b_numberE,
                      bin.b_numberF);
 
getch();
}
//------------------------------------------------
Yandex
Объявления
03.06.2009, 12:52     Битовые операции
Ответ Создать тему
Опции темы

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