Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja clear() i rdstate() jako jej argument

Ostatnio zmodyfikowano 2017-03-08 22:33
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Funkcja clear() i rdstate() jako jej argument
» 2017-03-08 19:42:18
Witam.
Wczytałem strumieniem do tablicy wszystko co miałem wczytać, ustawiła się flaga eofbit. Chcę wrócić na początek tablicy i przeczytac cos jeszcze raz. Żeby to zrobić muszę skasować tą flagę błędu. Mam taką linijkę:
C/C++
potok.clear( potok.rdstate() & ~ios::eofbit );
rdstate zwraca aktualny stan flagi błędu. Nie rozumiem co robi znak & tutaj oraz znak ~ przed ios::eofbit. Chcemy to znisczyć i odnosi się to do destruktora? :P
P-158685
1aam2am1
» 2017-03-08 20:09:08
Nie wiem o co pytasz ale:
jeżeli mamy zmienną np char a;
a = 0b00000101;

W a teraz mamy binarnie ustawione dwie flagi na 1 i 3 miejscu. Jest to liczba 5;

a = ~a;

teraz w a mamy odwrotność 0b11111010. Jedynki zamieniły się na zera i odwrotnie.

no a teraz odpowiedź co robi pojedyncza &
a = 0b110 & 0b011

a będzie zawierało liczbę 0b010
gdyż & jest to "and" binarny to i to

Więc twój zapis odwraca flage błędu i robi and z bitmaską. Zerując tylko pojedynczą flagę.

PS. Czemu po prostu nie użyjesz potok.clear();
P-158686
Lich555
Temat założony przez niniejszego użytkownika
» 2017-03-08 20:21:50
Tak było w przykładzie. Pewnie dlatego, że jeśli bym użył potok.clear() to usunąłbym wszystkie flagi błędu, a tak to usuwam tylko tą co chcę usunąć. Tak? :D
Po co odwracać bity w tej fladze?
P-158688
1aam2am1
» 2017-03-08 20:52:15
Odwracamy bity by zrobić and ze wszystkimi zwróconymi flagami
Np
00001 - to nasza flaga

01101 - to name zwróciło
11110 - odwrócona flaga
& - przeprowadzenie operacji
01100 - wynik. Jak widać nasza flaga została usunięta.
P-158697
Lich555
Temat założony przez niniejszego użytkownika
» 2017-03-08 21:04:27
Ok. Powiedz mi czy dobrze to rozumiem. Flagę wyzerujemy jak będzie miała zera tam gdzie teraz ma jedynki. Czyli jak mamy 0001 to musimy zrobić żeby na ostatnim bicie nie było 1. Gdybyśmy użyli and to by zwróciło 1 na końcu. A gdy użyjemy and na odwróconej fladze to zwróci nam 0?
Ta bitmaska o której mówisz to jest to rdstate()?
P-158707
1aam2am1
» 2017-03-08 22:33:08
Tak, chodzi oto że operacja & działa na każdym bicie osobno tak że
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
Nas interesują dwie ostatnie linijki
Jeżeli pierwsza kolumna to pojedyncze bity z bitmapy
To jak zrobimy nasza operacje otrzymamy to samo co było przedtem. Natomiast jeżeli zrobimy to z 0 (2 pierwsze linijki) to otrzymamy 0.
Więc jak w poprzednim poście mówiłem gdy odwrócony bity naszej flagi i zrobimy operacje & to otrzymamy wszędzie to co było a w miejscu bity flagi 0.
Flaga zostanie wyzerowana.
P-158730
« 1 »
  Strona 1 z 1