[C++] Konwersja typów

Kropka92
Użytkownik
Użytkownik
Posty: 57
Rejestracja: 23 paź 2011, o 13:57
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 18 razy

[C++] Konwersja typów

Post autor: Kropka92 »

Witam , mam następujący kod:

Kod: Zaznacz cały

int main(int argc, char *argv[])
{
  int a, b;
  a=3;
  b=7;
  float c;
  c=b/a;
  cout<<c<<endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
po czym na ekranie zauważam że wynik:
2
przypuszczam, że związane jest to z konwersją typów, nie wiem jednak dlaczego akurat typ float przetwarzany jest na typ int? wydawało mi się że w każdej operacji wykorzystującej dwa typy oba wyrównywane są do typu o wyższej randze , ale wyższą rangę ma przecież float
?
Ostatnio zmieniony 21 lut 2013, o 21:53 przez Afish, łącznie zmieniany 2 razy.
Powód: Kod funkcji umieszczamy w tagach [code] lub [icode].
Awatar użytkownika
Zordon
Użytkownik
Użytkownik
Posty: 4977
Rejestracja: 12 lut 2008, o 21:42
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 75 razy
Pomógł: 910 razy

[C++] Konwersja typów

Post autor: Zordon »

Jeśli masz po prawej stronie wyrażenie \(\displaystyle{ b/a}\) (dzielenie int/int) to zawsze zwrócony wynik będzie intem, niezależnie jakiego typu zmienna jest po lewej. To co się dzieje akurat w tym przypadku to wynik zostaje zrzutowany na float.
Jeśli chcesz uzyskać inny efekt, to albo zadeklaruj \(\displaystyle{ a,b}\) jako floaty (tak na marginesie to w ogóle nie używaj nigdy floatów tylko zawsze double), albo zmień \(\displaystyle{ b/a}\) na \(\displaystyle{ b*1.0/a}\)
Kropka92
Użytkownik
Użytkownik
Posty: 57
Rejestracja: 23 paź 2011, o 13:57
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 18 razy

[C++] Konwersja typów

Post autor: Kropka92 »

ok dziękuję Ci bardzo
ODPOWIEDZ