Domanda

Dato il seguente codice ANSI C, mi chiedo circa i risultati:

main() {
  int a = 19.4 / 9.7;               // result = 2
  float b = (int) 19.4 / (int) 9.7  // result = 2.000000, why?
  float c = (int) 9.7;              // result = 9
}

Ho capito che C taglierà tutte le cifre decimali sulla conversione in int, ma la mia logica ha un difetto se vedo la seconda linea. Se le cifre decimali sono state tagliate, il risultato deve essere 2,11,111 mila.

Come è la conversione in virgola mobile fatto in ANSI C?

È stato utile?

Soluzione

In serie C, letterali quali 19,4 e 9,7 si presume essere il doppio se non diversamente specificato (ad es. 19.4F, 9.7F).

Il compilatore utilizzare la funzione di divisione intera per calcolare x / y (se entrambi xey sono di int () tipo compatibile) o la funzione di divisione in virgola mobile al calcolatore x / y se almeno uno di X e Y sono un tipo in virgola mobile.

float b = (int) 19,4 / (int) 9.7 // risultato = 2,000 mila, perché?

Si stanno chiedendo 19,4 essere gettato a int, e 9,7 per essere cast int, chiedendo in modo efficace il compilatore per calcolare la divisione intera di 19/9 = 2, che viene poi promosso a galleggiare per la conservazione in b. 2 diventa 2.0.

.PMCD.

Altri suggerimenti

In linea 2, si sta convertendo i valori di input per interi, e poi fare una divisione intera (perché entrambi gli operandi per il divario sono interi, il divario è fatto in uno spazio intero - il che significa che qualsiasi resiult frazionaria viene eliminata).

Quindi, 19/9 = 2

Quindi, per ottenere questo intero in un galleggiante, converte implicitamente 2 ritorna 2,000 mila

No, deve essere 2. Se si divide un int da un int, si ottiene un int. Così 2. Si può fare il hokey-pokey poi convertirlo in quello che vuoi, ma i decimali sono già andati.

Divide due numeri interi e si otterrà un numero intero. Dividere un galleggiante e un intero e si otterrà un galleggiante.

(int) 19.4 / (int) 9.7 equivale a 19 / 9, che per primo viene risolto in 2 (un int). Solo dopo il 2 è calcolato è si è trasformato in un galleggiante per il tipo di variabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top