logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Typy zmiennych uint32_t. Warning: left shift count >= width of type.

xamrex 26 Mar 2011 13:47 1687 7
  • #1 9324491
    xamrex
    Poziom 28  
    Napisałem sobie coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    lecz po kompilacji otrzymuję ostrzeżenie
    warning: left shift count >= width of type
    


    Dlaczego?

    Jak z tego wybrnąć?
  • Pomocny post
    #2 9324523
    michalko12
    Specjalista - Mikrokontrolery
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #3 9324539
    mirekk36
    Poziom 42  
    michalko12 napisał:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    nie no to nie pomoże jak mi się zdaje , trzeba raczej zrobić rzutowanie:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 9324554
    xamrex
    Poziom 28  
    Dzięki mirek36, teraz działa.
    A z czego wynika ten warning?
    Przecież uint32_t jest 32 bitowa więc nie powinno być problemów z przesunięciem bitu na 18miejsce..
    Dlaczego trzeba wykonywać te operacje rzutowania?
  • Pomocny post
    #5 9324568
    michalko12
    Specjalista - Mikrokontrolery
    1 jest typu int więc jest 16 bitowa
  • Pomocny post
    #6 9324582
    mirekk36
    Poziom 42  
    michalko12 napisał:
    1 jest typu int więc jest 16 bitowa


    Dokładnie, po prostu pierwszy argument w wyrażeniu przesunięcia x :

    ( x << y )

    jest 16-bitowy , więc jeśli chcemy użyć 32-bitowego - to trzeba zrobić rzutowanie typu.
  • #7 9324598
    xamrex
    Poziom 28  
    Dzięki
  • #8 9324713
    michalko12
    Specjalista - Mikrokontrolery
    Możesz też bez rzutowania, ale musisz poinformować kompilator o typie literału
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
REKLAMA