• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tabela ASCII a zakres zmiennej char

Object Storage Arubacloud
0 głosów
587 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez thekibi27 Bywalec (2,110 p.)
Zastanawiam się dlaczego zmienna char ma zakres <-128,127>, jeśli w tabeli ASCII symbole są przyporządkowane wartością od 0 do 127. 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. Moje pytanie jak to działa i czy ma ktoś może tabelkę ASCII z przypisanymi wartościami ujemnymi?

1 odpowiedź

+1 głos
odpowiedź 27 stycznia 2019 przez criss Mędrzec (172,590 p.)
wybrane 27 stycznia 2019 przez thekibi27
 
Najlepsza

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. 

komentarz 27 stycznia 2019 przez thekibi27 Bywalec (2,110 p.)
Dzięki, za wyjaśnienie sytuacji.

Co do ASCII to chodziło mi oczywiście o "przerobioną" tabelkę, która oddawałaby wartości od <-128,127> w Codeblocksie ;)

Oczywiście można napisać szybki program, który mi to wypisze
komentarz 27 stycznia 2019 przez criss Mędrzec (172,590 p.)

Co do ASCII to chodziło mi oczywiście o "przerobioną" tabelkę, która oddawałaby wartości od <-128,127> w Codeblocksie 

Mimo wszystko nie ma czegoś takiego. Owszem, std::cout wypisze ci char(156) (lub char(-100) równoznacznie), ale to co ci się wyświetli będzie zależne od kodowania ustawionego w konsoli. Wszystkie te jedno-bajtowe kodowania (tzn. zapisujące zawsze jeden znak na jednym bajcie) w zakresie 0..127 są identyczne z ASCII, ale zakres 128..255 (równoznacznie -1..-128) mają już różne od siebie. Możesz się pobawić komendą chcp W Windowsie i próbować wypisywać różne wartości >127 na różnych kodowaniach (tzw. code page).

Podobne pytania

+1 głos
1 odpowiedź 839 wizyt
pytanie zadane 28 czerwca 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
0 głosów
0 odpowiedzi 336 wizyt
0 głosów
1 odpowiedź 3,031 wizyt
pytanie zadane 9 lutego 2017 w C i C++ przez robRoy Użytkownik (970 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...