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? 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 10 lip 2025, o 08:15


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 3 maja 2017, o 15:53 
    Offline
    Użytkownik

    Dołączył(a): 01 cze 2012
    Posty: 72
    Lokalizacja: Gdańsk
    Pomógł: 2

    Witam.
    Mam problem, którego sam nie potrafię rozwiązać.

    Gdy użyję takie wyrażenie:
    Kod:
    uint8_t liczba1 = ~(0xFF);
    unsigned char liczba2 = ~(0b11111111);

    to w obu przypadkach dostanę warning:
    Kod:
    warning: large integer implicitly truncated to unsigned type [-Woverflow]

    Jeżeli najstarszy bit jest zerowy lub zmienię deklarację zmiennej na większa (np. uint16_t),
    Kod:
    uint16_t liczba1 = ~(0xFF);
    uint8_t liczba2 = ~(0b01111111);

    albo
    Kod:
    uint8_t liczba1 = 0xFF;
    uint8_t liczba2 = ~liczba1;

    to kompilacja przebiega bez warningów.
    Dlaczego tak się dzieje? Tylda(~) to przecież tylko negacja bitowa.

    Problem zauważyłem przy lekcji z MultiLED, gdzie chciałem pododawać kropki (SEG_DP) do tablicy ze wzorami cyfr do wyświetlenia. Nie lubię ignorować ostrzeżeń. Proszę o pomoc.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 maja 2017, o 16:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Poszukaj informacji o DOMYŚLNEJ PROMOCJI DO INT. ;)
    np tu. http://atnel.pl/domyslna-promocja-do-typu-int.html

    ------------------------ [ Dodano po: 3 minutach ]

    i tu... też. post186768.html#p186768

    ------------------------ [ Dodano po: 8 minutach ]

    podpowiem że negacja jest liczona "za naszymi plecami" w przejściowym rejestrze o rozmiarze dwóch bajtów. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 maja 2017, o 17:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    :)
    @bartool,
    użyj takiego wpisu.
    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: 3 maja 2017, o 17:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2013
    Posty: 1760
    Pomógł: 196

    quartus napisał(a):
    A to co za pomysł i w którym to miejscu widać?

    Wykładnia:
    http://atnel.pl/domyslna-promocja-do-typu-int.html
    Burza mózgów:
    http://forum.atnel.pl/topic18108.html

    Pozdr.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 maja 2017, o 17:40 
    Offline
    Użytkownik

    Dołączył(a): 01 cze 2012
    Posty: 72
    Lokalizacja: Gdańsk
    Pomógł: 2

    Dzięki. Nie spodziewałem się tak szybkiej odpowiedzi. :D

    O domyślnej promocji do int nawet nie pomyślałem. Zresztą nie wiedziałem, że przy negacji bitowej w ogóle zachodzi taka potrzeba.

    Jednak coś mi tu jeszcze nie gra. Tu problemu nie ma:
    Kod:
    uint8_t liczba1 = 0xFF;
    uint8_t liczba2 = ~liczba1;

    Ale tu już jest:
    Kod:
    uint8_t liczba1 = ~(0xFF);

    Dlaczego?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 maja 2017, o 20:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2013
    Posty: 1760
    Pomógł: 196

    Witam
    quartus napisał(a):
    ‘‘integer promotions’’ require...
    ... possibly omitting the promotions.

    Ja w młodości to tylko j.rosyjski, ale jeśli kolega by mógł to proszę mi przetłumaczyć to:
    "large integer implicitly truncated to unsigned type" bo mi łobuz takie coś wypisuje dla
    uint8_t m= ~(0xFF)
    tzn. co pisze to wiem ale co to znaczy?

    Pozdr.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 maja 2017, o 23:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Witam,
    Przyjrzałem się jeszcze raz i odnośnie :
    bartool napisał(a):
    Jednak coś mi tu jeszcze nie gra. Tu problemu nie ma:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    w linijce nr 1, do zmiennej_1 uint8_t jest wpisana bezpośrednio podana wartość 0b(11111111) = 255.
    w linijce nr 2, do zmiennej_2 uint8_t jest obliczana wartość"~", ale z określonego już typu uint8_t.
    dlatego jest OK.
    bartool napisał(a):
    Ale tu już jest:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Tu będzie zastosowane niejawna konwersja , ponieważ 0xff określa wartość(0b11111111)
    ale nie określa jakiego typu dotyczy ten zapis (dlatego promocja :)
    pomimo że spodziewamy się wyniku uint8_t ).
    pozdrawiam.



    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: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Google [Bot] i 5 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO