Daha önce ondalıklı veya tam sayı değişkenlerini detaylı bir şekilde incelemiştik. Şimdi ise ekrana basılan her harf, rakam ve sembollerin ya da genel tabiri ile yazı karakterlerinin bellekte nasıl depolandığını detaylı bir şekilde inceleyeceğiz.
Değişkenin İkilik Tabanda Kapladığı Alanlar
1 2 3 4 5 6 7 | #include<stdio.h> int main(){ printf("%d", sizeof(char)); return 0; } |
Örnek kodumuzu derleyip çalıştırdığımızda char veri tipinin hafızada 1 byte yani 8 bit yer kapladığını öğreniyoruz.
Daha önce ekrana "Merhaba Dunya!" yazdırmıştık. Ancak bunu ikilik sistemdeki ifadelerle yazacak olsaydık, her karakter 8 bit'lik ikilik kodlarla ifade edilecekti.
- 'M' = 01001101
- 'e' = 01100101
- 'r' = 01110010
- 'h' = 01101000
- 'a' = 01100001
- 'b' = 01100010
- 'a' = 01100001
- ' ' = 00000000 / Null
- 'D' = 01000100
- 'u' = 01110101
- 'n' = 01101110
- 'y' = 01111001
- 'a' = 01100001
- '!' = 00100001
Görüldüğü gibi her sembol arkasında 8 bit'ten oluşan binary (ikilik) kodlar ile ifade ediliyor. Fakat çok uzun kodlar ve bizim sayı sistemimize uymuyorlar. Peki onluk sistemde bu kodları ifade edersek çalışır mı? Cevap, evet. Bu ikilik ifadeleri bizim anlayacağımız onluk ifadeler ifade eden sisteme ASCII kodu denilmektedir. Şimdi ise 'Merhaba Dunya!" ifademizi ASCII kodları ile nasıl ifade edileceğine bakalım.
- 'M' = 77
- 'e' = 101
- 'r' = 114
- 'h' = 104
- 'a' = 97
- 'b' = 98
- 'a' = 97
- ' ' = 0
- 'D' = 68
- 'u' = 117
- 'n' = 110
- 'y' = 121
- 'a' = 97
- '!' = 33
Karakter Tablosu
Terminal ekranına yazdırdığımız karakterlerin arka planda neleri ifade ettiklerini öğrenmiş olduk. Genel bir tablo ile bütün karakterleri ifade edelim. Dikkat!! Bu tabloyu ezbere bilmenize gerek yoktur.
Ondalık (ASCII) | İkilik (Binary) | Karakter | Ondalık (ASCII) | İkilik (Binary) | Karakter |
0 | 00000000 | NULL | 64 | 01000000 | @ |
1 | 00000001 | SOH | 65 | 01000001 | A |
2 | 00000010 | STX | 66 | 01000010 | B |
3 | 00000011 | ETX | 67 | 01000011 | C |
4 | 00000100 | EOT | 68 | 01000100 | D |
5 | 00000101 | ENQ | 69 | 01000101 | E |
6 | 00000110 | ACK | 70 | 01000110 | F |
7 | 00000111 | BEL | 71 | 01000111 | G |
8 | 00001000 | BS | 72 | 01001000 | H |
9 | 00001001 | HT | 73 | 01001001 | I |
10 | 00001010 | LF | 74 | 01001010 | J |
11 | 00001011 | VT | 75 | 01001011 | K |
12 | 00001100 | FF | 76 | 01001100 | L |
13 | 00001101 | CR | 77 | 01001101 | M |
14 | 00001110 | SO | 78 | 01001110 | N |
15 | 00001111 | SI | 79 | 01001111 | O |
16 | 00010000 | DLE | 80 | 01010000 | P |
17 | 00010001 | DC1 | 81 | 01010001 | Q |
18 | 00010010 | DC2 | 82 | 01010010 | R |
19 | 00010011 | DC3 | 83 | 01010011 | S |
20 | 00010100 | DC4 | 84 | 01010100 | T |
21 | 00010101 | NAK | 85 | 01010101 | U |
22 | 00010110 | SYN | 86 | 01010110 | V |
23 | 00010111 | ETB | 87 | 01010111 | W |
24 | 00011000 | CAN | 88 | 01011000 | X |
25 | 00011001 | EM | 89 | 01011001 | Y |
26 | 00011010 | SUB | 90 | 01011010 | Z |
27 | 00011011 | ESC | 91 | 01011011 | [ |
28 | 00011100 | FS | 92 | 01011100 | \ |
29 | 00011101 | GS | 93 | 01011101 | ] |
30 | 00011110 | RS | 94 | 01011110 | ^ |
31 | 00011111 | US | 95 | 01011111 | _ |
32 | 00100000 | SP | 96 | 01100000 | ' |
33 | 00100001 | ! | 97 | 01100001 | a |
34 | 00100010 | " | 98 | 01100010 | b |
35 | 00100011 | # | 99 | 01100011 | c |
36 | 00100100 | $ | 100 | 01100100 | d |
37 | 00100101 | % | 101 | 01100101 | e |
38 | 00100110 | & | 102 | 01100110 | f |
39 | 00100111 | ' | 103 | 01100111 | g |
40 | 00101000 | ( | 104 | 01101000 | h |
41 | 00101001 | ) | 105 | 01101001 | i |
42 | 00101010 | * | 106 | 01101010 | j |
43 | 00101011 | + | 107 | 01101011 | k |
44 | 00101100 | , | 108 | 01101100 | l |
45 | 00101101 | - | 109 | 01101101 | m |
46 | 00101110 | . | 110 | 01101110 | n |
47 | 00101111 | / | 111 | 01101111 | o |
48 | 00110000 | 0 | 112 | 01110000 | p |
49 | 00110001 | 1 | 113 | 01110001 | q |
50 | 00110010 | 2 | 114 | 01110010 | r |
51 | 00110011 | 3 | 115 | 01110011 | s |
52 | 00110100 | 4 | 116 | 01110100 | t |
53 | 00110101 | 5 | 117 | 01110101 | u |
54 | 00110110 | 6 | 118 | 01110110 | v |
55 | 00110111 | 7 | 119 | 01110111 | w |
56 | 00111000 | 8 | 120 | 01111000 | x |
57 | 00111001 | 9 | 121 | 01111001 | y |
58 | 00111010 | : | 122 | 01111010 | z |
59 | 00111011 | ; | 123 | 01111011 | { |
60 | 00111100 | < | 124 | 01111100 | | |
61 | 00111101 | = | 125 | 01111101 | } |
62 | 00111110 | > | 126 | 01111110 | ~ |
63 | 00111111 | ? | 127 | 01111111 | DEL |
Lakin bu tablo daha buz dağının görünen kısmı, daha 256 ASCII ifadesi kadar daha var. Türkçe karakterlerde bu ifadelerin devamında yer almakta. Bizim Türkçe karakter kullanmamızın sebebi ise tam sayılarda bahsettiğimiz signed int değişkeninin bir saat gibi tekrar başa dönmesidir. Devam eden ASCII kodlarına Extended ASCII denilmektedir.
Karakter Tanımlama Çeşitleri
Bir örnek ile bir karakteri hem ASCII kodu olarak hem de normal şekilde yazdıralım.
1 2 3 4 5 6 7 8 9 10 | #include<stdio.h> int main(){ char harf1 = 'A'; char harf2 = 65; printf("{%d, %d}", harf1, harf2); return 0; } |
Örneğimizi derleyip çalıştırdığımızda her iki değişkeninde A karakterini taşıdığını görüyoruz. harf1 değişkenine direkt olarak ' ' içerisinde A harfini taşımasını söyledik. harf2 değişkenine A karakterinin ASCII kodu olan 65 ile taşıması gereken harfi ifade ettik.
0 Yorumlar