Bene, non sono un esperto in questo, ma la chiave è ciò che lo standard C indica per "set di stampa standard della macchina". Sulla maggior parte delle macchine / sistemi moderni questo sarà ASCII a 7 bit. Quindi, se assegni solo i caratteri di quell'intervallo a una variabile char
, puoi essere certo che, interpretato come un numero intero, ottieni un valore positivo.
Il set di stampa (completo) di una macchina può contenere molti più caratteri, ma quando, ad esempio, assegni una umlaut come ä, ö o ü a una variabile di carattere, devi aspettarti su alcune macchine la conversione dei numeri interi di quella variabile diventa < 0, sugli altri > 0, questo è non definito nello standard. Inoltre, non vi è alcuna garanzia che un tale carattere verrà sempre stampato come la stessa lettera, questo può, ad esempio, dipendere dalla codepage di attivazione o dall'ambiente del programma.