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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 7 kwi 2025, o 07:15


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
    Autor Wiadomość
    PostNapisane: 22 lip 2022, o 14:17 
    Offline
    Użytkownik

    Dołączył(a): 09 lip 2019
    Posty: 116
    Pomógł: 11

    Ostatnio wpakowałem się na ciekawą minę przy pisaniu jednego programu. Doszedłem po chwili o co chodzi, ale pomyślałem, że inne osoby też mogłyby się chwilę pogłowić :-)

    Pyanie brzmi - jakie wartości przyjmą zmienne t1 do t7 - i dlaczego niektóre z nich są różne ? ;-)


    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: 22 lip 2022, o 15:43 
    Offline
    Moderator
    Avatar użytkownika

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

    Już bardzo bardzo dawno temu, jeszcze w czasach pierwszego wydania Bluebooka było to wyjaśniane ;) zajrzyj na mojego bloga

    https://atnel.pl/domyslna-promocja-do-typu-int.html

    krótko mówiąc - wiedząc co to domyślna promocja to tam gdzie masz dziwne wartości wystarczy albo należy zrobić jawne rzutowanie do uint8_t i po kłopocie

    Warto pamiętać o domyślnej promocji w C

    _________________
    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: 22 lip 2022, o 17:37 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Brak nawiasów w definicji:

    #define VAL 1 << 4 | 1 << 5

    spowoduje, że wynik operacji:

    uint8_t t1 = VAL;
    uint8_t t2 = ~t1;

    nie będzie taki sam, jak:

    uint8_t t5 = ~VAL;

    choć teoretycznie powinien być.

    Spowodowane jest to brakiem nawiasów w definicji i priorytetami operatorów ("C operator precedence"). Operator negacji bitowej ~ ma wyższy priorytet niż operacja przesunięcia << oraz alternatywa bitowa |
    Dlatego ważne jest stosowanie nawiasów w definicjach:

    #define VAL (1 << 4 | 1 << 5)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lip 2022, o 19:27 
    Offline
    Użytkownik

    Dołączył(a): 09 lip 2019
    Posty: 116
    Pomógł: 11

    mirekk36 napisał(a):
    [...]
    krótko mówiąc - wiedząc co to domyślna promocja to tam gdzie masz dziwne wartości wystarczy albo należy zrobić jawne rzutowanie do uint8_t i po kłopocie
    [...]

    Hehe... też na początku myślałem, że to jest to, ale tym razem rację ma andrews

    andrews napisał(a):
    Brak nawiasów w definicji:

    #define VAL 1 << 4 | 1 << 5
    [...]


    Gratulacje!

    Najśmieszniejsze jest to, że zaczęło się od tego, że pamiętałem o nawiasach, ale przez jakąś pomroczność jasną dałem tyldę wewnątrz nawiasu. Co jeszcze ciekawsze - akurat w tym programie "prawie wszystko" co było potrzebne działało dobrze. Został jeden kontest "zagadka", który robił coś dziwnego... i tak trafiłem na tego babola ;-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lip 2022, o 19:47 
    Offline
    Moderator
    Avatar użytkownika

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

    jak zobaczyłem

    #define VAL 1 << 4 | 1 << 5

    i później przypisanie z ~ to od razu pomyślałem o domyślnej promocji ;) ale to musiałby być najstarszy bit ustawiany a tu tylko 4ty i 5ty ;) więc skucha

    andrews zawsze czujny ! ;) i dobrze prawi

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

    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