Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/67: Рейтинг темы: голосов - 67, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
1

Битовые операции

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

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

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

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2009, 19:51
Ответы с готовыми решениями:

Битовые последовательности и битовые операции
Вычислить сумму по модулю 2 всех бит в позициях, номер которых кратен 2^k. (1, 2, 4, 8, 16, 32). ...

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

Используя только битовые операции и операции арифметического сложения и вычитания, вычислите число
Даны числа x и y. Используя только битовые операции и операции арифметического сложения и...

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

23
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.06.2009, 20:58 3
Вообще-то в Си нету встроенной возможности задавать константы в двоичном предсталвнии, а потому "char s = a&0b10000000;" надо заменить на "char s = a & 0x80;"
0
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
02.06.2009, 21:03 4
reitar,
... Собственно вопрос возникает как вывести восьмеричный код элемента ...
... посчитать количество единиц ...
... сделать замену старших битов ...

std::bitset тебе поможет
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.06.2009, 21:05 5
Цитата Сообщение от Evg Посмотреть сообщение
Вообще-то в Си нету встроенной возможности задавать константы в двоичном предсталвнии, а потому "char s = a&0b10000000;" надо заменить на "char s = a & 0x80;"
Я это сделал для наглядности. Да и гсс скомпильнет.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:22  [ТС] 8
Если чесно то я не очень понял сам пример ибо знаю С++ тока 5-ый день, а пример как я понял на просто С.
Скажите можно ли просто вывести бинарный код элемента "a" например? я где то видел что выводили в восьмеричной системе с помошью добавки "oct" строка была примерно следующая cout<<a<<oct; Можно ли выводить так , но меняя в зависимости от надобности систему счисленая на dec , bin или hex. И еще вопрос нельзя ли как либо на С++ сравнить количествое единиц и нолей между символами не выводя их бинарные коды для последующего сравнения?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.06.2009, 21:30 9
Вывести-то можно. Именно так, как ты выше написал. А подсчитать количество единиц можно, как в примере выше, но вместо вывода, просто считай в переменной и все.
Ну раз не очень понял, то поднапряги извилины, почитай про битовый &

Добавлено через 54 секунды
Это можно не понять по причине не знания что такое & и << почитай в инете. Если что-то про это будет не ясно - спрашивай. Только сначала сам попробуй.
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 21:32  [ТС] 10
мне нужен был только вывод , как посчитать единицы , сравнить их количество и как в зависимости от результата заменить старшие биты я и так знаю =)
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
02.06.2009, 21:34 11
Тогда лови
http://cplus.about.com/od/lear... ntwo_4.htm
0
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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
02.06.2009, 22:17 14
Или вместо "char r" использовать "int r". Эта хрень судя по всему char трактует именно как символ, а не как числовое значение
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
02.06.2009, 22:22  [ТС] 15
Спасибо , подскажите теперь , что надо поставить вместо cout <<dec<<(int)r << endl; для двоичной , bin ,binary к сожелению не поlходит , или возможно надо какую то из библиотек подключить ?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
03.06.2009, 00:43 16
Не, библиотеки тебе не помогут . Ты должен этот вывод сделать ручками. Попробуй.
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 8
03.06.2009, 00:46  [ТС] 17
чтож , спасибо , будем думать =)
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
03.06.2009, 00:59 18
reitar,
C++
1
for(int i = 7, a = -90; i >= 0; i--)cout << (a >> i & 0x1);
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
03.06.2009, 09:41 19
Цитата Сообщение от Vourhey Посмотреть сообщение
Не, библиотеки тебе не помогут
Сие мне никогда понятно не было. Почему разработчики языка предусмотрели наличие в языке возможности задать константу в 16-ричном и 8-ричном написании (причём последнее сделано откровенно через ж$пу), а так же в требования к окружению выставили печать значения в этих представлениях, но положили на двоичное представление.
0
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
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();
}
//------------------------------------------------
0
03.06.2009, 12:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2009, 12:52
Помогаю со студенческими работами здесь

Битовые операции
На входе: строка с числом в двоичной форме. Распознать строку в переменную типа int. На выходе:...

Битовые операции
На входе: строка с числом в двоичной форме. Распознать строку в переменную типа int. На выходе:...

Битовые операции
Привет! Помогите пожалуйста извлечь данные. Имеется DWORD значение. Из него надо извлечь данные...

Битовые операции
Имеется число int x = 85; // 1010101 - двоичное представление // 6543210 - номера битов //...

Битовые операции
Есть код signed int a = 10; a = !a; cout &lt;&lt; a; Выводит 0, объясните, почему??

Битовые операции
Собсно,если используется 4 байтовая переменная,то почему она представлена 16 битами(1010 0110 0010...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru