C Programlama #Bölüm 6# Detaylı char Veri Tipi

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)KarakterOndalık (ASCII)İkilik (Binary)Karakter
000000000NULL6401000000@
100000001SOH6501000001A
200000010STX6601000010B
300000011ETX6701000011C
400000100EOT6801000100D
500000101ENQ6901000101E
600000110ACK7001000110F
700000111BEL7101000111G
800001000BS7201001000H
900001001HT7301001001I
1000001010LF7401001010J
1100001011VT7501001011K
1200001100FF7601001100L
1300001101CR7701001101M
1400001110SO7801001110N
1500001111SI7901001111O
1600010000DLE8001010000P
1700010001DC18101010001Q
1800010010DC28201010010R
1900010011DC38301010011S
2000010100DC48401010100T
2100010101NAK8501010101U
2200010110SYN8601010110V
2300010111ETB8701010111W
2400011000CAN8801011000X
2500011001EM8901011001Y
2600011010SUB9001011010Z
2700011011ESC9101011011[
2800011100FS9201011100\
2900011101GS9301011101]
3000011110RS9401011110^
3100011111US9501011111_
3200100000SP9601100000'
3300100001!9701100001a
3400100010"9801100010b
3500100011#9901100011c
3600100100$10001100100d
3700100101%10101100101e
3800100110&10201100110f
3900100111'10301100111g
4000101000(10401101000h
4100101001)10501101001i
4200101010*10601101010j
4300101011+10701101011k
4400101100,10801101100l
4500101101-10901101101m
4600101110.11001101110n
4700101111/11101101111o
4800110000011201110000p
4900110001111301110001q
5000110010211401110010r
5100110011311501110011s
5200110100411601110100t
5300110101511701110101u
5400110110611801110110v
5500110111711901110111w
5600111000812001111000x
5700111001912101111001y
5800111010:12201111010z
5900111011;12301111011{
6000111100<12401111100|
6100111101=12501111101}
6200111110>12601111110~
6300111111?12701111111DEL

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.