A cosa corrisponde sizeof (2.5)?

Una domanda d’esame era:

Q2: sizeof(2.5) è uguale a ____.

A.1

B.2

C.3

D.4

Non ci sono suffissi come fl FL , quindi la costante in virgola mobile (2.5) ha un doppio tipo. Poiché non viene specificato nient’altro, suppongo che il suo valore non sia specificato. Ad esempio, su alcune implementazioni il cui CHAR_BIT è 32 (che causa sizeof (char)==sizeof (long) , forse), la risposta può essere B.

Tuttavia, nella maggior parte dei casi, dove CHAR_BIT è 8, la risposta dovrebbe essere 8, ma 8 non è elencato sulla carta!

Quando ho posto una domanda così ridicola in un esame / intervista, a cosa dovrei rispondere?

PS: Ignora semplicemente queste parentesi inutili per favore 🙂 PPS: IEEE 754 è concesso dallo standard?

Questa domanda è incoerente: sizeof(2.5) è definito dall’implementazione. Senza contesto extra, non è ansible determinare quale risposta scegliere.

Se questo è un esame orale, puoi spiegarlo all’esaminatore e ottenere un voto molto buono, dato quanto sai già. (a parte IEEE-754 non è richiesto dallo Standard, ma un’implementazione molto comune del double ).

Se si tratta di un esame scritto per il quale non è ansible fornire ulteriori spiegazioni (essendo lo spazio marginale troppo esiguo), è necessario selezionare 4 per i seguenti motivi:

  • l’esaminatore potrebbe erroneamente supporre che 2.5 sia un float , e assume erroneamente che float sia sempre 32 bit, assumendo inoltre erroneamente che i byte siano 8 bit. Questa è la spiegazione più probabile. Fai attenzione in un esame orale per rimanere umile se pensi di conoscere meglio dell’esaminatore, probabilmente è il caso qui.

  • la domanda potrebbe essere sbagliata, come sizeof("2.5") ma manca il " . Per questa domanda, la risposta è sicuramente 4 , e avrebbe senso cercare di ingannare lo studente con la risposta C

  • la domanda potrebbe essere sbagliata, come sizeof('2.5') ma manca il ' . Per questa domanda molto brutta, la risposta è la stessa di sizeof(int) , spesso 4 su sistemi con 8 bit byte. Nota che sizeof(2,5) è uguale a sizeof(int) , ma sarebbe una domanda troppo complicata.

  • su alcuni sistemi DSP dove double è 64 bit e char 16 bit, la risposta 4 sarebbe corretta.

  • altre risposte hanno anche meno probabilità di essere corrette, tranne ovviamente sul computer DS9K .

sizeof(2.5) produrrà la dimensione di un double in byte, che è definita dall’implementazione.

Dallo standard:

5.3.3 Sizeof
L’operatore sizeof fornisce il numero di byte nella rappresentazione dell’object del suo operando.
Il risultato di sizeof applicato a qualsiasi altro tipo fondamentale (3.9.1) è definito dall’implementazione.

sizeof restituisce la dimensione in chars , non in bit. Ad esempio, sizeof(char) è per definizione 1 .

Tuttavia, questa domanda non è molto ben scritta poiché è specifica del sistema. La mia ipotesi è che la dimensione di un double sul proprio sistema sia 8 , che sarebbe 64 bit da (8 * CHAR_BIT) == “ (assumendo il valore comune di CHAR_BIT come 8 ).