char ma mieścić wszystkie wartości z "implemenation's basic character set", ale to nie znaczy że specjalnie po to będziemy tworzyć 7-bitowy (???) typ bez znaku. Może mieścić więcej. To czy może przechowywać ujemne wartości też jest implementation-dependent (zależne od kompilatora, ew. opcji kompilacji...).
Dodatkowo widzę, że jeśli wpiszę się np. char znak=156; to kompilator nie wyrzuci błędu tylko "zredukuje" w jakiś sposób tą wartość do zdefiniowanego zakresu.
Wtedy, jeśli char jest typem ze znakiem (tak jak tutaj), dokonywana jest jakaś konwersja. Również implementation-dependent :D W tym przypadku i na większości (wszystkich?) rzeczywistych kompilatorach na istniejące architektury będzie to po prostu reinterpretacja bitów (156 mieści się na 8 bitach ale nie w kodzie naturalnym, nie w U2). Więc ze 156 czyli 10011100 zrobi się -100 jeśli odczytasz bity jako system U2. Troche to uprościłem, bo 156 jest typu signed int (czyli w naszym przypadku również system U2 ale, najprawdopodbniej [implementation-dependent] 32 bity), ale mam nadzieję że rozumiesz?
czy ma ktoś może tabelkę ASCII z przypisanymi wartościami ujemnymi?
ASCII jest tylko jedno, nie ma wartości ujemnych.