• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Unie_pola-bitowe

VPS Starter Arubacloud
0 głosów
277 wizyt
pytanie zadane 18 maja 2020 w C i C++ przez reken Początkujący (390 p.)

Czesc.
Chcialbym aby ktos wyjasnil mi uzywanie pol bitowych wraz z struktura i unia.Wiem ze temat jest pewnie prosty ale niebardzo do lape o co chodzi.
Dla przykladu mam do wykonania
 unię która pozwala rozbić liczbę typu int tak, aby możliwe było wyświetlenie wszystkich jej bajtów składowych. Rozmiar unii musi być równy rozmiarowi typu int natomiast liczba pól unii byte_set nie może przekroczyć dwóch.

chcialem uzyc czegos takiego
 

typedef union
{
  struct
  {
    unsigned char bit1 : 1;
    unsigned char bit2 : 1;
    unsigned char bit3 : 1;
    unsigned char bit4 : 1;
    unsigned char bit5 : 1;
    unsigned char bit6 : 1;
    unsigned char bit7 : 1;
    unsigned char bit8 : 1;
  }u;
  unsigned char status;
}DeviceStatus;

unsigned char c = 4;
DeviceStatus ds;
ds = c;
ds.u.bitn

Znalazlem na innym forum ale tu wyrzuca mi blad ze przypisuje ds=c rozne typy wiec doszedlem do wniosku ze nie lape tego.
Jakim sposobem cos takiego ma rozbic mi liczbe na bity?Jak rozumiem ma to wygladac tak 
tworze strukture z polami bitowymi,jesli dobrze zrozumialem dzieki polom bitowym jestem w stanie zmniejszyc rozmiar zmiennej tj finalnie struktura bedzie zajmowac mniej.Nastepnie ta strukture wrzucic do uni i w main stworzyc zmienna unii i co przypisac do niej nie lape dzialania tego.Bylbym wdzieczny jakby ktos mi to troche rozjasnil

komentarz 18 maja 2020 przez tkz Nałogowiec (42,000 p.)
Trochę po za tematem, sam wymyśliłeś takie zadanie, czy dostałeś skądś? Obecnie pola bitowe są bezużyteczne. Twoje pola mają rozmiar od 0 do 1. Dlaczego używasz typedef przy uni?
komentarz 18 maja 2020 przez reken Początkujący (390 p.)
Zadanie narzucone.To co wrzucilem to byl kod zaczerpniety z forum natomiast sadzilem ze chodzi wlasnie o cos takiego.Dlatego wrzucilem w kompilator probujac modyfikowac i sprawdzic jak to dziala ale nie dziala.
Pewnie moge wrzucic liczbe w petle z uzyciem%(modulo) i za pomoca tego wyjdzie mi zapis binarny tylko co z tego jak mam to zrobic z uzyciem z uzyciem uni(tak jak opisalem)

1 odpowiedź

0 głosów
odpowiedź 18 maja 2020 przez reken Początkujący (390 p.)

No dobra w zasadzie wpadlem na to:
 

struct byte_number{
    unsigned int byte_1:8;
    unsigned int byte_2:8;
    unsigned int byte_3:8;
    unsigned int byte_4:8;
};
union all_byte{
    unsigned int number;
    struct byte_number x;
};

i teraz jak zrobie manewr:
 

union all_byte x_byte;
    unsigned int y=1;
    x_byte.number=y;

    printf("%d\n",x_byte.x.byte_1);
    printf("%d\n",x_byte.x.byte_2);
    printf("%d\n",x_byte.x.byte_3);
    printf("%d\n",x_byte.x.byte_4);

To wychodzi co chcialem.

Tylko niech ktos mi powie wrzuce liczbe 1094861636 i dostaje 68 67 66 65 to jest dobrze tylko jak on to liczy?
Binarnie to jest tyle 0100   0001   0100   0010   0100   0011   0100    0100 wiec jesli int ma 4 bajty zatem np wartosc 68 to wartosc 1 bajta jak rozumiem zatem 8 bitow  wiec biorac ustawienie 0100 0001 to z czego to wychodzi?

Podobne pytania

0 głosów
1 odpowiedź 163 wizyt
pytanie zadane 6 sierpnia 2022 w C i C++ przez RufinB Obywatel (1,830 p.)
+1 głos
1 odpowiedź 488 wizyt
pytanie zadane 19 czerwca 2021 w JavaScript przez greg456 Nowicjusz (190 p.)
0 głosów
0 odpowiedzi 383 wizyt
pytanie zadane 10 sierpnia 2020 w C i C++ przez fortuna Początkujący (310 p.)

92,454 zapytań

141,262 odpowiedzi

319,090 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...