Sto leggendo un argomento di posta elettronica per quanto riguarda la seguente riga di codice:ANSI C in realtà specifica quali byte vengono utilizzati quando si esegue il typecasting su un numero intero più piccolo?
p = (unsigned char)random();
La funzione random restituisce un lungo, e qualcuno dice che questo non è sicuro perché è possibile che il typecast potrebbe prendere il MSB, invece di l'LSB. So che su x86 il typecast restituirà LSB, ma non riesco a trovare alcuna informazione sul fatto che questo sia effettivamente richiesto da ANSI C o se è uno di quei "comportamenti non definiti" specifici dell'implementazione.
La domanda è interessante e la risposta vale la pena conoscere, ma nel codice reale, si dovrebbe cercare di rimuovere la confusione. In altre parole, se si cambia il codice in questo modo, non c'è dubbio su quale byte viene utilizzato: 'p = (unsigned char) (random()% 256)'. Ciò impedirà a qualsiasi futuro lettore del tuo codice di chiedersi la stessa cosa. Come regola generale, non si dovrebbe scrivere codice che si basi sulla conoscenza dettagliata degli standard per comprendere. –
In effetti il cast non è necessario; è possibile assegnare qualsiasi tipo numerico a qualsiasi altro tipo numerico e verrà convertito implicitamente come se fosse un cast. –
@KeithThompson: i compilatori possono avvisare se una conversione potenzialmente lossy viene utilizzata senza cast, sebbene ... – Christoph