Zdravím, může mi někdo logicky vysvětlit proč když dělím:
double x;
x = 133 / 2;
se hodnota proměné x = 66 a ne 66,5 když je to double? Logicky by to mělo tak prece vyjít ne? Bohužel nevychází :/
Díky
operandy jsou int a výsledek je int, teprve ten se přetypuje na double. Jiná situace by nastala v případě, že by jeden z opereandů byl double
x = (double)133 /2;
pak se i druhý operand přetypuje na double a výsledek bude double.
hu
#1 Alexí
jak napsal hlucheucho můžeš ho přetipovat
double x;
x = (double)133/2;
// nebo můžeš napsat
double x, y = 2;
x = 133/2;
// třetí možnost
double x;
x = 133/2.0;
#4 Kenvelo
Jen pro upřesnění. Při výpočtu aritmetického výrazu Jazyk C postuje tak, ze nejprve vyhodnotí výraz a teprve poté řeší, jak se provede samotné přiřazení výsledku do požadované proměnné.
Vyhodocení výrazu se provádí nad takovým datovým typem, který je "nejvyšší společný" pro operandy daného operátoru (zde dělení). Takže v příkladu double x = 133 / 2; se nejprve vezmou operandy dělení, což jsou int. Provede se operace dělení nad int, a výsledek je opět zcela logicky int. Tedy 133/2 = 6. Teprve poté se začne řešit, jak int uložit do x, které je double. Hodnota v x bude tedy 66 převedených do double.
Pokud chceš, aby se již dělení provedlo v double, musí být alespoň jeden z operandů typu double. To jsou ty příklady, co sem lidé dávali.
Akorát si myslím, že ten druhý příklad od @Kenvelo měl být
// nebo můžeš napsat
double x, y = 2;
x = 133/y;
#5 voty
a proč by nemohl být první a poslední příklad ? v první to přetypuješ s int na double a u posledního je hodna 2.0 vyhodnocena jako double kterou dělíš a ukládáš do proměnné double..
všechny 3 varianty se dají použít. Osobně bych volil druhou a nikde není napsáno, že hodnotu nesmíš přetypovat nebo že kompilator si nesmí určit typ sám ...
#7 Kenvelo
Sorry, blbě jsem se vyjádřil. Použít jdou všechny, pouze v tom druhém je IMHO překlep, který jsem chtěl uvést na pravou míru a tím se mi to celé zamotalo ... Dělíš tam "2" a né "y".
Prostě má první odpověď byla pro @Alexi, s tím, že jsem chtěl opravit překlep v tvém příkladu ... Snad to pochopíte :)
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku