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

zapis liczb na bitach

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
379 wizyt
pytanie zadane 13 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)

Witam,

podobno w takim przypadku:

struct moja {
   unsigned int a1:4, /* 4 bity */
 };

maksymalną liczbą dla moja.a1 jest 7.

Tu moje pytanie skoro 4 bity, no to największą możliwą liczbą do zapisania było by 15...
-> 2^0+2^1+2^2+2^3= 15

czy może kwestia leży w tym że 1 bit z tych 4 ma zapisane w sobie [\0]...???

1 odpowiedź

0 głosów
odpowiedź 13 czerwca 2018 przez k222 Nałogowiec (30,150 p.)
wybrane 13 czerwca 2018 przez WhizzKid
 
Najlepsza

podobno w takim przypadku:

to może sprawdzimy???

 

#include <iostream>
#include <string>

using namespace std;

struct moja {
   unsigned int a:4; 
 };
 
int main()
{
  moja x;
  x.a = 15;
  cout<<x.a<<endl;
  x.a = 16;
  cout<<x.a<<endl;
}

u mnie ten program działa poprawnie dla 15 a wali się dla 16 (możesz powpisywać inne wartości), co jest znakiem że 15 jest maksymalną liczbą jaką można tam wpisać. To, z czym ci się mogło pomylić to fakt, że w przypadku int jeden bit idzie na znak, ale tu mamy unsigned int czyli znak nie jest przechowywany. Tak nawiasem mówiąc zauważ, że ten program dla liczb z przedziału [0;15] działa dobrze, a dla większych liczb dzieje się ciekawa rzecz, mianowicie mamy:
dla 16 wypisuje 0 (=16 - 16)
dla 19 wypisuje 3 (= 19 - 16)
...
bo rzeczywiście zmienna a przechowuje 4 bity, ale jak do niej wpiszesz coś większego to nie będzie tam błędu, będzie tylko ostrzeżenie, ponieważ reszta bitów w przypadku większej liczby nie zostanie po prostu zapisana (czyli dla 19 (10) = 10011 (2) zostanie zapisany tylko kawałek 0011 (2) = 3 (10)). Jak chcesz to sam możesz sprawdzić co dzieje się dla liczb większych od 7 gdy mamy int a nie unsigned int)

Podobne pytania

0 głosów
2 odpowiedzi 335 wizyt
pytanie zadane 27 grudnia 2016 w Matematyka, fizyka, logika przez qlucha Obywatel (1,790 p.)
0 głosów
2 odpowiedzi 194 wizyt
pytanie zadane 20 maja 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)
0 głosów
1 odpowiedź 5,645 wizyt

91,787 zapytań

140,452 odpowiedzi

316,848 komentarzy

61,134 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...