(unsigned char)(x)
calcola in modo efficace uno unsigned char
con il valore di x % (UCHAR_MAX + 1)
. Questo ha l'effetto di dare un valore positivo (tra 0
e UCHAR_MAX
). Con la maggior parte delle implementazioni UCHAR_MAX
ha un valore di 255
(sebbene lo standard permetta a un unsigned char
di supportare un intervallo più ampio, tali implementazioni sono insolite).
Poiché il risultato di (unsigned char)(x)
è garantito nell'intervallo supportato da un int
, la conversione in int
non cambierà valore.
L'effetto netto è il byte meno significativo, con un valore positivo.
Alcuni compilatori forniscono un avviso quando si utilizza un tipo char
(firmato o meno) come indice di matrice. La conversione in int
chiude il compilatore.
il cast to int è ridondante – sp2danny