• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
715 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ź 1,059 wizyt
pytanie zadane 28 czerwca 2020 w C i C++ przez Drożdżówka Obywatel (1,870 p.)
0 głosów
0 odpowiedzi 496 wizyt
0 głosów
1 odpowiedź 3,432 wizyt
pytanie zadane 9 lutego 2017 w C i C++ przez robRoy Użytkownik (970 p.)

93,188 zapytań

142,204 odpowiedzi

322,027 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2476p. - Tomasz Bielak
  6. 2445p. - Łukasz Siedlecki
  7. 2443p. - rucin93
  8. 2418p. - Michal Drewniak
  9. 2373p. - Marcin Putra
  10. 2367p. - Adrian Wieprzkowicz
  11. 2317p. - Mikbac
  12. 2156p. - Anonim 3619784
  13. 2016p. - Michał Telesz
  14. 1733p. - rafalszastok
  15. 1628p. - Dominik Łempicki (kapitan)
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...