2009-07-16 8 views
32

Uczyłem C młodszego brata studiującego inżynierię. Wyjaśniłem mu, jak różne typy danych są faktycznie przechowywane w pamięci. Wyjaśniłem mu logistykę za tym, że podpisał/bez znaku liczby i bit zmiennoprzecinkowy w liczbach dziesiętnych. Kiedy mówiłem mu o typie znaku w C, również zabrałem go przez system kodu ASCII, a także, w jaki sposób char jest również zapisywany jako 1-bajtowy numer.Czy istnieje jakaś logika za zamawianiem kodów ASCII?

Zapytał mnie, dlaczego "A" podano kod 65, a nie cokolwiek innego? Podobnie dlaczego "a" ma konkretnie kod 97? Dlaczego istnieje luka 6 kodów ascii między zakresem wielkich liter i małych liter? Nie miałem pojęcia o tym. Czy możesz mi pomóc to zrozumieć, ponieważ to również wywołało wielką ciekawość. Nigdy nie znalazłem żadnej książki, która omawiałaby ten temat.

Jaki jest tego powód? Czy kody ASCII są logicznie zorganizowane?

+3

O ile dobrze jest mówić o floatach i liczbach dziesiętnych w sposób nietechniczny, większość elementów pływających na wolności to binarny zmiennoprzecinkowy, a nie dziesiętny zmiennoprzecinkowy, który jest źródłem wielu zamieszania dla programistów . To trochę jak nauczanie, że słońce krąży wokół Ziemi - dobrze, gdy dzieci rozumieją dzień i noc, ale mylą dla początkujących naukowców rakietowych. –

+0

Powiązane: [Sprawy każdego hakera raz poznanego] (http://www.catb.org/esr/faqs/things-every-hacker-once-knew/) (o ASCII i powiązanych technologiach) –

Odpowiedz

65

Istnieją powody historyczne, przede wszystkim, aby kody ASCII łatwo konwertować:

Cyfry (0x30 do 0x39) mają przedrostek dwójkowy 110000:

0 is 110000 
1 is 110001 
2 is 110010 

itp Więc jeśli wymazać prefiks (pierwsze dwie cyfry 1), kończy się cyfrą dziesiętną kodowaną binarnie.

litery mają binarny prefiks 1000000:

A is 1000001 
B is 1000010 
C is 1000011 

itp samo, jeśli usunąć prefiks (pierwszy „1”), możesz skończyć ze znakami alfabetu indeksowane (A wynosi 1 , Z ma 26 itd.).

Małe litery mają przedrostek binarny 1100000:

a is 1100001 
b is 1100010 
c is 1100011 

itp jw. Więc jeśli dodasz 32 (100000) do dużej litery, będziesz miał małą literę.

+2

Kup dlaczego jest "A" 65 zamiast 64? Każde kodowanie ma pewien stopień logiki i pewien stopień arbitralności –

+0

@JimBalter Ponieważ chcieli, aby alfabet był zindeksowany 1. 1 to A, 26 to Z. –

+0

@NathanLong Nie ma powodu, aby tego chcieć i żadnych dowodów, że jest to prawdą. A 65 nie jest 1. Odjęcie 63 od litery przyniosłoby 1-indeksowanie. –

0
  • "A" to 0x41 w systemie szesnastkowym.
  • "a" to 0x61 w systemie szesnastkowym.
  • "0" do "9" to 0x30 - 0x39 w systemie szesnastkowym.

Tak przynajmniej jest to łatwe do zapamiętania numery dla A, a i 0-9. Nie mam pojęcia o symbolach. Zobacz The Wikipedia article on ASCII Ordering.

6

Oto bardzo szczegółową historię i opis kodów ASCII: http://en.wikipedia.org/wiki/ASCII
W skrócie:

  • ASCII jest oparte na standardach kodowania dalekopis
  • pierwsze 30 znaków są „niedrukowalny” - służy do formatowania tekstu
  • następnie kontynuują one znaki drukowalne, mniej więcej w kolejności, w jakiej są umieszczone na klawiaturze. Sprawdź swoją klawiaturę:
    • przestrzeń,
    • wielkimi literami napis czapki numerycznych!”, #, ...,
    • numery
    • objawy zwykle umieszczone na końcu rzędu klawiatury z numerami - wielkie litery
    • litery alfabetycznie
    • objawy zwykle umieszczone na końcu wierszy klawiatura z literami - górna przypadku
    • małe litery, alfabetycznie
    • objawy zwykle umieszczone na końcu wierszy klawiatura z literami - małe litery
+0

Niektóre starsze instrumenty klawiszowe (ja wiem Atari 800 był jeden) miał "znak na klawiszu 2, więc zgodność między kodowaniem a kolejnością klawiszy była bliższa – dan04

4

Odległość pomiędzy A i a jest numer 32. To całkiem okrągła, prawda?

Luka 6 znaków między wielkimi i małymi literami wynika z tego, że (32 - 26) = 6. (Uwaga: w alfabecie angielskim jest 26 liter).

+3

Alfabet angielski ma 26 znaków, jeśli robisz naiwne założenia dotyczące pożyczonych słów –

+1

W rzeczywistości ï jest tą samą literą tak jak ja, ale ze znakiem diakrytycznym, a chociaż angielski zapożyczył kilka słów, nie sądzę, żeby zapożyczył takie litery jak Iceland (islandzki) czy IJ (holenderski) – MSalters

0

Jeśli spojrzysz na reprezentacje binarne dla "a" i "A", zobaczysz, że różnią się one tylko o 1 bit, co jest całkiem przydatne (zmiana wielkości liter na małe lub odwrotnie jest po prostu kwestia podrzucania trochę). Po co tam startować, nie mam pojęcia.

10

Ten wykres pokazuje całkiem dobrze z Wikipedii: Zwróć uwagę na dwie kolumny kontrolne 2 górnej 2 niżej, a następnie luki wypełnione misc. ASCII Chart on Wikipedia

Należy również pamiętać, że ASCII został opracowany w oparciu o to, co przeszło wcześniej. Aby uzyskać więcej informacji na temat historii ASCII, zobacz: this superb article by Tom Jennings, która zawiera także znaczenie i użycie niektórych nieznajomych znaków kontrolnych.

+0

Link wydaje się być zepsuty –

0

Wikipedia:

Sam kod został skonstruowany tak, że większość kody kontrolne były razem i wszystkie kody graficzne byli razem. pierwsze dwie kolumny (32 pozycje) były zarezerwowane dla znaków kontrolnych. [14] Znak "spacja" musiał przyjść przed grafiką , aby ułatwić sortowanie algorytmów , aby stała się pozycją 0x20. [15] Komitet zdecydował, że jest to ważne dla obsługi dużych liter: 64-znakowych alfabetów i wybrał strukturę ASCII, aby można było łatwo uzyskać zredukowany do użytecznego 64-znakowego zestawu kodów graficznych. [16] Małe litery nie były przeplatane z dużymi literami. Aby zachować opcje otwarte dla małych liter oraz innych grafiki, specjalne i liczbowe kody zostały umieszczone przed literami, i literą „A” została umieszczona w pozycji 0x41 dopasować projekt odpowiedni brytyjski norma [17] Cyfry 0-9 zostały umieszczone w taki sposób, aby odpowiadały wartościom w binarnym z prefiksem 011, co powoduje, że konwersja z kodami binarnymi dziesiętnymi jest prosta.

Powiązane problemy