Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega168][C] Rodzaje zmiennych

24 Paź 2011 19:09 873 6
  • Poziom 21  
    Witam, myślałem że rozumiem teorię na temat rodzajów zmiennych w C, ale od godziny mam problem, który mnie zdziwił i nie mogę sobie z nim poradzić.
    Oto kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ten, program działa bez zarzutów, ale ponieważ niepotrzebnie zajmuje sporo miejsca wiec prościej byłoby zrobić tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Niestety ten program nie działa (od ext wszystko już jest zerem), ale dla mnie jest to nielogiczne.
    Skoro ext1 to double i jest wynikiem dwóch intów (widać w pierwszym programie że to działa), to czemu ext który jest też jest double a jest wynikiem czterech intów już nie działa?
  • Moderator Mikrokontrolery Projektowanie
    Dlatego, że domyślnie zmienne są promowane do typu int, niezależnie od operacji. Wnyikiem dzielenia dwóch liczb o typie int jest też liczba o typie int, nie ma czegoś takiego jak automatyczna konwersja do real/double. Musisz to jawnie określić.

    Dodano po 33 [sekundy]:

    BTW, na AVR typ double jest równy typowi real.
  • Poziom 21  
    Dzięki za podpowiedź o real/duble.

    Ale dalej nie rozumiem różnicy - przecież określiłem że ext to jest double, co mam jeszcze zrobić?
    Myślałem że to wystarczy:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Moderator Mikrokontrolery Projektowanie
    Owszem i kompilator robi konwersję wyniku (prawej strony wyrażenia) do double, lecz dopiero po wyliczeniu jego wartości. Same operacje po prawej są prowadzone na najszerszym typie użytych zmiennych, a więc na typie int. Jeśli chcesz to zmienić musisz jawnie zrobić rzutowanie typów.
  • Poziom 21  
    Problem w tym że Umin i Umax to są liczby całkowite, a są jeszcze wykorzystywane w wielu miejscach w programie, operacje na nich, wyświetlanie itp. Musiałbym dużo rzeczy w programie zmieniać, nie ma innego sposobu?
  • Moderator Mikrokontrolery Projektowanie
    Jawne rzutowanie to na przykład:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 21  
    No chyba że tak, myślałem że jawne rzutowanie ma miejsce wtedy gdy wszystkim zmiennym przyporządkowujemy taki typ, żeby w danym wyrażeniu występowały tylko zmienne danego typu.