Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 26 kwi 2024, o 20:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 5 lut 2018, o 14:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lut 2015
Posty: 33
Lokalizacja: Stalowa Wola
Pomógł: 0

Witam. Pisze program i natknąłem się na blok warunkowy w którym muszę sprawdzić jednocześnie siedem flag. Ma to działać na zasadzie jeżeli którakolwiek z nich jest ustawiona wykona się blok warunkowy. Moje pytanie jest następujące - czy pisać półkilometrową linijkę, czy jest jakiś bardziej elegancki sposób o którym nie wiem?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2018, o 14:13 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 544
Pomógł: 27

jest
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
np. tak



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2018, o 14:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Ja często grupuję potrzebne flagi w jednym bajcie i w podobnej do Twojej sytuacji po prostu sprawdzam tylko jeden warunek, a nie całą litanię :)

------------------------ [ Dodano po: 7 minutach ]

Twoje flagi akurat można spokojnie podpiąć pod taki bajt i nazwać, np. grupa_error.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście ważne jest aby korzystać w programie z pojedynczych bitów, bo dość często wykorzystuje się cały bajt wykorzystując tylko dwa stany marnując jego potencjał. Ma to uzasadnienie gdy zależy na szybkości i objętości kodu.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2018, o 07:02 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Sylwek a powiedź proszę jak to się ma do szybkości działania? W BB są opisane pola bitowe z lakoniczną informacją, że oszczędność kodu jest kosztem szybkości dostępu do pojedynczych bitów i że programista sam musi określić, co jest bardziej istotne. Czy mógłbyś to trochę rozjaśnić? Myślę, że autor pytania również skorzysta, bo twoja propozycja jest zdecydowanie "ładniejsza" niż 7 warunków if.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2018, o 07:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27226
Lokalizacja: Szczecin
Pomógł: 1041

Tom277 napisał(a):
Sylwek a powiedź proszę jak to się ma do szybkości działania?

Jeśli się kolega tak mocno zastanawia nad szybkością działania to najpierw powiedz o jaką szybkość ci chodzi i do czego ta szybkość ? ;)

Tom277 napisał(a):
W BB są opisane pola bitowe z lakoniczną informacją

Skoro masz pola bitowe to wiadomo, że ładnie wygląda to dla oka, ale jeśli się je źle zorganizuje np jakieś pole kilkubitowe będzie leżało na granicy dwóch bajtów ... to już w ogóle aby mieć do tego dostęp kompilator będzie musiał wygenerować sporo operacji maskowania aby się dostać do potrzebnych bitów ...

Tom277 napisał(a):
że oszczędność kodu jest kosztem szybkości dostępu do pojedynczych bitów i że programista sam musi określić, co jest bardziej istotne.

Dlatego jak jest sporo pamięci ram a potrzeba zaledwie kilku prostych flag do których odwołujemy się sporadycznie w programie i pojedynczo to absolutnie dużo szybciej wyjdzie odwoływać się nawet do flagi jedno-bitowej umieszczonej w jednym bajcie (pomimo marnotrawstwa 7 bitów) ;)

ja wprawdzie nie jestem SylwekK ale w odpowiedzi na pytanie
Tom277 napisał(a):
Czy mógłbyś to trochę rozjaśnić?


Jeśli zaś przychodzi nam często korzystać z kilku flag naraz to tak jak pisze Sylwek warto je grupować w ramach jednego bajtu i ... no co trzeba robić aby dowiadywać się o stanie np kilku z nich naraz ? MASKOWAĆ panie - maskować



oczywiście idealną sytuacją jest gdy ktoś chce po prostu sprawdzić tylko (tak jak autor w pierwszym poście) czy któraś flaga jest = 1

to co za problem umieścić je wszystkie w ramach JEDNEGO bajtu - a tak na prawdę to co oznacza umieszczenie ? Nic ... tyle co nadanie nazwy zmiennej, np

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i nie ważne z ilu bitów będziesz korzystał czy z 2, 4, czy z 8-miu - zawsze ten cały warunek z pierwszego postu można zapisać tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A jeśli będziesz chciał je sprawdzać grupami czy np tylko kilka z nich jest = 1 a inne są = 0 ... to przygotowujesz sobie odpowiednie maski dla takich grupek zgodnie z poradnikiem wyżej i po prostu dajesz warunek z odpowiednią maską
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oczywiście gdy ma ich być więcej to wtedy już opłacać się może stworzenie pól bitowych np:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i wtedy te warunki wyżej mogą wyglądać tak jak niżej już bez naszego maskowania bo kompilator za nas porobi odpowiednie maskowanie ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


albo nawet

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2018, o 08:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Ło matko! :) Mirku po Twoim rozwinięciu już chyba wszystkie wątpliwości powinny być rozwiane. Swoim kosztem zaoszczędziłeś mi kupę klikania :) Tylko podziękować i złocisty napój postawić :-D

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2018, o 14:07 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

O kurcze dzięki Mirku.
A o jaką szybkość mi chodzi, normalną :lol: Po prostu natknąłem się na informację, że stosowanie pól bitowych jest kosztem szybkości dostępu do nich no i nie miałem zielonego pojęcia o jak duże spowolnienie chodzi, jaki jest to rząd wielkości.
Wiesz jak jest? Dla uczącego się, non stop pojawią się pytania i niejasność. Później wiele z tych rzeczy okazuje się nieistotne, ale to przychodzi z doświadczeniem, więc pytam.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2018, o 23:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

SylwekK napisał(a):
Mirku po Twoim rozwinięciu już chyba wszystkie wątpliwości powinny być rozwiane
Jeszcze można do proponowanej struktury dodać unię, aby odwoływać się po różnej części (po bitach lub po całych bajtach) tej samej zmiennej. Jak praktycznie zastosować unię można znaleźć w Mirkowym poradniku.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 2 minutach ]

Kolega fysiek zapytał się o zwykłego if-a, a dostał taką dawkę wiedzy, że pewnie długo nie będzie się mógł otrząsnąć ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 09:00 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2562
Pomógł: 126

Skompiluj sobie prosty przykład z zastosowaniem zmiennych w kilku bajtach oraz w kilku bitach jednego bajtu i porównaj pliki .lss - powinieneś zobaczyć różnice.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 19:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 lut 2015
Posty: 33
Lokalizacja: Stalowa Wola
Pomógł: 0

Dziękuję panowie. Widać już światełko w tunelu :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO