C nyelvben két egész típusú változó hányadosának kiíratása?
int a = 2;
int b = 3;
float c = a/b;
printf("%f", c);
Ez így 0át ad ki eredménynek, nyilván úgy működne ha valamelyik szám változóját float-al adtam volna meg, de a feladat kifejezetten egész típusú változót kér az a-bre, ilyenkor hogy tudom megcsináli?
Típus konverzió.
float c = (float)a/b;
Első voltam. Kicsit kifejtem bővebben. :)
Szóval amikor a harmadik sorhoz ér a végrehajtás, akkor először veszi az értékadás jobb oldalát. Ott van két int, amiket ha eloszt, akkor ugyancsak int eredményt ad. Márpedig az nulla lesz. (2-ben a 3 nullaszor van meg. Van persze maradék, de az más történet.)
Szóval az int eredményt kell belepaszíroznia a float változóba, és ekkor fogja csak átkonvertálni lebegőpontos értékké. Viszont a nulla az floatként is nulla, szóval ez fog a c-be kerülni.
Ha az a-t floattá konvertálod explicit módon (tehát te írod oda, nem bízod a fordítóra), akkor egy float értéket fog int-tel osztani. Ehhez már a b értékét is floattá fogja konvertálni, mert erre kötelezi a C szabvány. Tehát a b már "magától" konvertálódik, aminek az eredménye is float lesz az értékadáskor.
Hamegtalálom a konvertálási szabályokat, linkelem. :)
Hirtelen csak ezt találtam.
Ha két típussal műveletet végzel ezek közül, akkor előtte a magasabban lévőre konvertálódik az alacsonyabban lévő operandus is.
Tehát float/int esetén először az int is floattá "alakul", és utána hajtódik végre a művelet. Az eredmény a magasabban lévő típusú lesz, vagyis float.
Semmi lényeges, csak a fogalmazás nem teljesen pontos.
"Szóval amikor a harmadik sorhoz ér a végrehajtás, akkor először veszi az értékadás jobb oldalát."
Nem tudjuk, hogy mit vesz először. A kiértékelési sorrend nem kötött ennyire a C/C++ nyelvekben.
ha parasztok akarunk lenni így is lehetne akár
printf("%d/%d",a ,b);
mert végülis ez is a hányadosa :D
"Nem tudjuk, hogy mit vesz először. A kiértékelési sorrend nem kötött ennyire a C/C++ nyelvekben."
Csak arra akartam utalni, hogy a fordító nem fogja csak azért átkonvertálni a jobboldali változókat, mert a baloldal típusa más. A jobboldaltól függetlenül az "int/int" mindig int/int-ként értékelődik ki, és az eredménye is int típusú lesz. A további konvertálás akkor kezdődik (ha a baloldal típusa miatt szükséges), mikor a jobboldal már kiértékelődött.
:)
A jobboldaltól függetlenül.. ==> A BALoldaltól függetlenül..
Már keverem én is szezont a fazonnal. :DD
"Típus konverzió."
Típuskényszerítésnek is hívják. (Typecasting.)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!