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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.85
ArniDexian
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 10
#1

Выдать побитовое представление используя union и битовые поля. - C++

08.03.2011, 11:37. Просмотров 3951. Ответов 8
Метки нет (Все метки)

Написать функцию для вывода на экран битового представления в ЭВМ числа . Знаю вот такой способ, но он один, а надо двумя (используя битовые поля и объединение)

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
void binary (unsigned char ch) 
{
    union 
    {
        unsigned char ss;              
        struct 
        {
            unsigned a0:1;
            unsigned a1:1;
            unsigned a2:1;
            unsigned a3:1;
            unsigned a4:1;
            unsigned a5:1;
            unsigned a6:1;
            unsigned a7:1;
        } byte;
    } cod;
 
    cod.ss = ch;      //занесение в объединение значения параметра
    cout <<"  bity =  ";
                                        
                                         // вывод бит
    cout <<" "<<cod.byte.a7<<" "<<cod.byte.a6  
        <<" "<<cod.byte.a5<<" "<<cod.byte.a4 
        <<" "<<cod.byte.a3<<" "<<cod.byte.a2 
        <<" "<<cod.byte.a1<<" "<<cod.byte.a0<<endl;
}
Было бы интересно узнать решение этой программы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 11:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выдать побитовое представление используя union и битовые поля. (C++):

Используя битовые операции, вывести на экран восьмиричное представление беззнакового короткогоцелого - C++
Знаю такая задача уже была на форуме в таком виде, но возможно ли её написать проще на уровне начинающего? #include &quot;stdafx.h&quot; #include...

Побитовое представление числа - C++
Добрый вечер, подскажите, пожалуйста, каким образом можно сформировать число из нужных мне битов, скажем, есть 4 бита (0, 0, 0, 1), далее...

Побитовое представление числа. - C++
Всем привет, подскажите пожалуйста, нужно: Написать программу, которая принимает с клавиатуры число x, имеющее тип unsigned char и...

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

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

Битовые поля - C++
Народ, напишите программу для включения 3-го разряда однобайтового числа и переключения 7-го. Никак не понимаю что и как...Напишите пож..

8
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.03.2011, 12:57 #2
Дык этож и есть "используя битовые поля и объединение".
0
ArniDexian
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 10
08.03.2011, 13:02  [ТС] #3
Выполнить задание двумя способами: через объединение (union) и через структуру с битовыми полями.
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.03.2011, 13:10 #4
Так что-ли?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdlib.h>
#include <stdio.h>
 
struct Byte {
  unsigned a0:1;
  unsigned a1:1;
  unsigned a2:1;
  unsigned a3:1;
  unsigned a4:1;
  unsigned a5:1;
  unsigned a6:1;
  unsigned a7:1;
};
 
int main() {
  struct Byte byte;
  *(unsigned char*)&byte = 0x55;
 
  printf("%d%d%d%d%d%d%d%d\n", byte.a7, byte.a6, byte.a5, byte.a4,
                               byte.a3, byte.a2, byte.a1, byte.a0);
 
  return 0;
}
0
ArniDexian
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 10
08.03.2011, 13:39  [ТС] #5
Цитата Сообщение от lemegeton Посмотреть сообщение
*(unsigned char*)&byte = 0x55;
Это, я так понимаю, Си. А как реализовать на С++? 0х55 задать через ссылку на требуемое число?
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
08.03.2011, 13:58 #6
Цитата Сообщение от ArniDexian Посмотреть сообщение
А как реализовать на С++?
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
 
int main(){
    struct{
        unsigned a0:1, a1:1, a2:1, a3:1, a4:1, a5:1, a6:1, a7:1;
    }n;
    *reinterpret_cast<unsigned*>(&n)=10;
    std::cout<<n.a7<<n.a6<<n.a5<<n.a4<<n.a3<<n.a2<<n.a1<<n.a0<<"\n";
}
0
ArniDexian
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 10
08.03.2011, 14:40  [ТС] #7
Спасибо всем за внимание, доделал своим способом, вот полностью рабочая программа!

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream> 
using namespace std;
 
void BitStruct (unsigned long var) //С использованием битовых полей
{
    union 
    {
        unsigned long varULong;              
        struct 
        {
            unsigned a0:1;
            unsigned a1:1;
            unsigned a2:1;
            unsigned a3:1;
            unsigned a4:1;
            unsigned a5:1;
            unsigned a6:1;
            unsigned a7:1;
            unsigned a8:1;
            unsigned a9:1;
            unsigned a10:1;
            unsigned a11:1;
            unsigned a12:1;
            unsigned a13:1;
            unsigned a14:1;
            unsigned a15:1;
            unsigned a16:1;
            unsigned a17:1;
            unsigned a18:1;
            unsigned a19:1;
            unsigned a20:1;
            unsigned a21:1;
            unsigned a22:1;
            unsigned a23:1;
            unsigned a24:1;
            unsigned a25:1;
            unsigned a26:1;
            unsigned a27:1;
            unsigned a28:1;
            unsigned a29:1;
            unsigned a30:1;
            unsigned a31:1;
        } byte;
    } cod;
 
    cod.varULong = var;
    cout <<"  bity:  ";
                                                                                
    cout <<" "<<cod.byte.a31<<" "<<cod.byte.a30  <<" "<<cod.byte.a29<<" "<<cod.byte.a28<<" "<<cod.byte.a27<<" "<<cod.byte.a26<<" "<<cod.byte.a25<<" "<<cod.byte.a24
        <<" "<<cod.byte.a23<<" "<<cod.byte.a22  <<" "<<cod.byte.a21<<" "<<cod.byte.a20<<" "<<cod.byte.a19<<" "<<cod.byte.a18<<" "<<cod.byte.a17<<" "<<cod.byte.a16
        <<" "<<cod.byte.a15<<" "<<cod.byte.a14  <<" "<<cod.byte.a13<<" "<<cod.byte.a12<<" "<<cod.byte.a11<<" "<<cod.byte.a10<<" "<<cod.byte.a9<<" "<<cod.byte.a8
        <<" "<<cod.byte.a7<<" "<<cod.byte.a6  <<" "<<cod.byte.a5<<" "<<cod.byte.a4<<" "<<cod.byte.a3<<" "<<cod.byte.a2<<" "<<cod.byte.a1<<" "<<cod.byte.a0<<endl;
}
 
void Union (unsigned long var) //С использованием только union
{           
    union 
    {
        unsigned long varULong;  //varULong - переменная требуемого типа
        long bytes;
    } byte;
    byte.varULong = var;
    cout <<"  bity:  ";
        for (int i=31; i>=0; i--)                                                  
        cout<<" "<<((byte.bytes >> i) & 1);
    cout<<endl;
}
 
 
void main()                
{
    unsigned x;
    cin>>x;                  
    if (x >= 0)
    {
        BitStruct(x);           // битовое представление числа
        Union(x);
    }
}
PS: Данная функция используется для побитового представления типов float, double (т.е. для чисел с плавающей запятой).
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
09.03.2011, 05:41 #8
хранение битовых полей внутри еденицы памяти (слева-направо или справа-налево) не определено
0
alek7ey09
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 2
12.01.2013, 11:42 #9
Подскажите, а как можно в данной программе использовать динамический массив?
0
12.01.2013, 11:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 11:42
Привет! Вот еще темы с ответами:

Битовые поля - C++
Здравствуйте, расскажите мне пожалуйста как происходят операции с битами. Мне необходимо получить 1 байт, разделить его на 2 битовых поля...

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

Битовые поля - C++
В приложении 1 есть пример использования битовых полей. В выделенной строке структуре присваивается бит, полученный из функции. (Кстати,...

Битовые поля - C++
Здравствуйте. Возникла необходимость работы с битовыми полями. Однако не могу понять, почему в нижеприведенном примере биты...


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

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

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