Sabitler

SABİTLER
Veriler ya nesnelerin içerisinde ya da doğrudan sabit biçiminde bulunurlar. Sabitler nesne
biçiminde olmayan, programcı tarafından doğrudan girilen verilerdir. Sabitlerin sayısal
değerleri derleme zamanında tam olarak bilinmektedir. Örneğin :
x = y + z;
ifadesi bize a ve b içindeki sayıların toplanacağı ve c’ye aktarılacağını anlatır. Oysa
d = x + 10;
ifadesinde x değiskeni içinde saklanan değer ile 10 sayısı toplanmıstır. Burada 10 sayısı
herhangi bir değiskenin içindeki değer değildir, doğrudan sayı biçiminde yazılmıstır. Nesnelerin
türleri olduğu gibi sabitlerin de türleri vardır. Nesnelerin türleri daha önce gördüğümüz gibi
bildirim yapılırken belirlenir. Sabitlerin türlerini ise derleyici, belirli kurallar dahilinde sabitlerin
yazılıs biçimlerinden tespit eder. Sabitlerin türlerini bilmek zorundayız, çünkü C dilinde
sabitler, değiskenler ve operatörler bir araya getirilerek (kombine edilerek) ifadeler
(expressions) olusturulur. Daha sonra detaylı göreceğimiz gibi C dilinde ifadelerin de bir türü
vardır ve ifadelerin türleri, içerdikleri sabit ve değiskenlerin türlerinden elde edilir. O halde
sabit türlerini detaylı olarak inceleyelim :
Tamsayı Sabitleri (integer constants)
Đsaretli Tamsayı Sabitleri (signed int) :
Bunlar tipik olarak int türden değiskenlerine atanan ve tamsayı biçiminde olan sabitlerdir,
yazılırken herhangi bir ek almazlar. C’de int türü sınırları içinde olan her tamsayı birer tamsayı
sabit (ya da int türden sabit ) olarak ele alınır.
-25
30000
25789
-320
0
sayılarının hepsi isaretli tamsayı (signed int) sabiti olarak ele alınırlar, çünkü int türü sayı
sınırları içinde bulunuyorlar ve sonlarında herhangi bir ek bulunmuyor.
int türü sistem bağımlıdır ve int sabitleri de sistemden sisteme değisebilir.
sistem uzunluk sınır değerler
DOS, WINDOWS 3.1 2 byte – 32768, + 32767
UNIX WINDOWS 95 4 byte -2147483648, +2147483647
Örneğin 425000 Dos’ta int sabiti değildir ama UNIX’te int sabittir.
Uzun Tamsayı Sabitleri(Long integer constants)
Uzun Tamsayı Sabitleri
Đsaretli Uzun Tamsayı Sabitleri (signed long)
long türden sabitler iki türlü ifade edilirler :
1. long int türünün sayı sınırları içinde bulunan bir sayının sonuna L ya da l yazarak.
Bu durumda derleyiciler ilgili sayı int sınırları içinde olsa da long sabit olarak ele alır.
6 . BÖLÜM :
36
22345l long sabittir. çünkü sonunda l eki var.
0l, -23465L, 325l long sabitlerdir.
long sabit kullanımında algılanması daha kolay olduğu için L soneki tercih edilmelidir. l
soneki 1 rakamıyla görünüm açısından çok benzediği için karısıklığa neden olabilir.
2. int türün sayı sınırlarını asan fakat long int türü sayı sınırları içinde kalan her tamsayı
doğrudan long int türden sabit olarak ele alınır. Bu durum doğal olarak, DOS gibi int ve
long türlerinin birbirinden farklı olduğu sistemlerde anlamlıdır.
Örneğin DOS’da
325000
-33333
1278902
long türden sabitlerdir. Oysa 32 bitlik sistemlerde long türünün uzunluğuyla int türün
uzunluğu aynı (4 byte) olduğu için bu sayılar int sabiti olarak ele alınacaktır. Bu
sistemlerde yukarıdaki sayıları long sabit olarak ele almak istersek sonlarına l ya da L
eklememiz gerekmektedir.
Karakter Sabitleri (char)
char sabitleri tipik olarak char türden nesnelere atanan sabitlerdir. (Böyle bir zorunluluk yok.)
char türden sabitler C dilinde dört ayrı biçimde bulunabilirler.
1. Đstenilen bir karakter tek tırnak (single quote) içerisinde kullanılırsa char türden sabit
olarak ele alınır. Örnek :
‘a’
‘J’
‘Ç’
‘:’
’8′
‘<' Yukarıdaki gösterimlerin herbiri birer char türden sabitidir. C'de tek tırnak içerisinde belirtilen char sabitleri, aslında o karakterin karakter setindeki (örneğin ASCII tablosundaki) sıra numarasını gösteren bir tamsayıdır. { char ch; ch = 'a'; ... } Bu örnekte aslında ch isimli char türden değiskene a karakterinin ASCII tablosundaki sıra numarası olan 97 sayısı aktarılmaktadır. Tek tırnak içindeki karakter sabitlerini görünce aslında onların küçük birer tamsayı olduğunu bilmeliyiz. Çünkü bellekte karakter diye birsey yoktur hersey ikilik sistemde 1 ve 0 lardan olusan sayılardır. Yukarıdaki örnekte istersek ch değiskenine asağıdaki gibi bir atama yapabiliriz: ch = 'a' + 3; Bu durumda ch değiskenine sayısal olarak 100 değeri atanacaktır. Bu sayıya da ASCII tablosundaki 'd' karakteri karsılık gelir. 2. Önceden tanımlanmıs ters bölü karakter sabitleri (escape sequences) Yukarıda tanımlanan yöntemde ekrana basılamayan yani ekranda görüntü olusturmayan (non printable) karakterleri ifade edemeyiz. Örneğin çan karakteri (çan sesi) ya da ters bosluk (backspace) karakteri ekrana basılamaz. Tek tırnak içindeki ters bölü (back slash) SABİTLER 37 karakterinden sonra yer alan bazı karakterler çok kullanılan ancak basılamayan bazı karakterlerin yerlerini tutarlar. Bunların listesi asağıda verilmistir: Önceceden Tanımlanmıs Ters Bölü Karakter Sabitleri (Escape Sequences) Tanım ASCII No ‘′ ‘x0′ ‘′ NULL karakter 0 ‘a’ ‘x7′ ‘7′ çan sesi (alert) 7 ‘b’ ‘x8′ ‘10′ geri bosluk (back space) 8 ‘t’ ‘x9′ ‘11′ tab karakteri (tab) 9 ‘n’ ‘xA’ ‘12′ asağı satır (new line) 10 ‘v’ ‘xB’ ‘13′ düsey tab (vertical tab) 11 ‘f’ ‘xC’ ‘14′ sayfa ileri (form feed) 12 ‘r’ ‘xD’ ‘15′ satır bası (carriage return) 13 ‘”‘ ‘x22′ ‘42′ çift tırnak (double quote) 34 ‘\’ ‘x5C’ ‘134′ ters bölü (back slash) 92 kullanılıslarına bir örnek : { char ch; ch = ‘a’; } 3. 16′lık (hexadecimal) sayı sisteminde tanımlanmıs karakter sabitleri Tek tırnak içinde tersbölü ve x karakterlerinden sonra bir hex sayı verilirse bu ASCII tablosundaki o sayısal değerin gösterdiği sıra numarasındaki karaktere isaret eden bir karakter sabitidir. ‘x41′ /* 41H numaralı ASCII karakteridir. */ ‘xff’ /* FFH numaralı ’2′ karakter sabitidir. */ ‘x1C’ /* 1C numaralı ASCII karakter sabitidir. */ Küçük “x” yerine büyük harfle “X” yazmak C’nin ilk klasik versiyonunda kabul ediliyordu simdi artık geçerli değildir. Örnek : { char harf; harf = ‘x41′; } Yukarıdaki örnekte harf isimli char türden değiskene 41H ASCII sıra no.lu karakter atanmıstır. Bu da desimal sistemdeki 65 sayısına esittir. 65 sıra nolu ASCII karakteri ‘A’ karakteridir. Dolayısıyla harf isimli değiskene ‘A’ atanmıstır. 4. 8′lik (octal) sayı sistemde tanımlanmıs karakter sabitleri Tek tırnak içinde tersbölü karakterinden sonra bir oktal sayı yazılırsa bu kullanılan karakter setindeki o sayısal değerin gösterdiği sıra numarasındaki karaktere isaret eden bir karakter sabitidir. Tek tırnak içindeki ters bölü karakterini izleyen sayı üç basamaktan uzun olmamalıdır. Sekizlik sayıların yazımında olduğu gibi sayının basında sıfır olma zorunluluğu yoktur. Bu sekilde yazılabilecek en büyük karakter sabiti ‘377′ dir.: ‘12′ /* 10 numaralı ASCII karakteri, Tam sayı değeri 10 */ ‘16′ /* 14 numaralı ASCII karakteri. Tam sayı değeri 14 */ ‘123′ /* 83 numaralı ASCII karakteri. Tam sayı değeri 83 */ Program içinde kullanımına bir örnek: { char a, b; a = ‘xbc’ ; /* hex sistemde tanımlanmıs char sabit */ b = ‘12′; /* oktal sistemde tanımlanmıs bir char sabit */ } 7 numaralı ASCII karakteri olan çan karakterini sabit olarak 3 biçimde de yazabiliriz. ‘x7′ /* hex gösterimli karakter sabiti */ ‘7′ /* oktal gösterimli karakter sabiti */ ‘a’ /* önceden belirlenmis ters bölü karakter sabiti */ Burada tercih edilecek biçim son biçim olmalıdır.Hem tasınabilir bir biçimdir hem de okunabilirliği daha iyidir. Baska karakter setlerinde çan sesi karakteri 7 sıra numaralı karakter olmayabilir ama önceden belirlenmis ters bölü karakter sabiti seklinde ifade edersek hangi sistem olursa olsun çan sesi karakterini verecektir. Ayrıca kodu okuyan kisi çan sesi karakterinin 7 numaralı ASCII karakteri olduğunu bilmeyebilir ama C programcısı olarak ‘a’ nın çan sesi karakteri olduğunu bilecektir. Karakter sabitleri konusunu kapatmadan önce karakter setleri konusunda da biraz bilgi verelim: Günümüzde kullanılan en popüler karakter seti ASCII karakter setidir. ASCII (American Standard Code for Information Interchange) sözcüklerinin basharflerinden olusan bir kısaltmadır. ASCII setinin orjinal versiyonunda karakterler 7 bitlik bir alanda kodlanmıstır. Bazı bilgisayarlar ise 8 bit alana genisletilmis ASCII seti kullanırlar ki bu sette 128 yerine 256 karakter temsil edilebilmektedir. Farklı bilgisayarlar farklı karakter setleri kullanabilmektedir. Örnek olarak IBM mainframe’leri daha eski bir set olan EBCDIC seti kullanırlar. Unicode ismi verilen daha gelistirilmis bir karakter seti vardır ki karakterler 2 byte alanda temsil edildikleri için bu sette 65.536 farklı karakter yer alabilmektedir. Gelecekte bir çok makinanın bu karakter setini destekleyecek biçimde tasarlanacağı düsünülmektedir. Đsaretsiz türlere iliskin sabitler Đsaretsiz türlere iliskin sabitler onların isaretli biçimlerinin sonuna u ya da U getirilmesiyle elde edilirler. -15000 (signed) int sabit 15000U (unsigned) int sabit. 1200L (signed) long sabit 1200Lu (unsigned) long sabit. Sonek olarak kullanılan l, L, u ve U harflerinin sırası önemli değildir. 123ul 123UL 123Lu 123lu Yukarıdaki hepsi geçerli birer uzun tamsayı (unsigned long int) sabittir. Tamsayı sabitlerinin 16′lık ve 8′lik sistemlerde gösterilmesi C’de tamsayı sabitleri (char, int, long) 10′luk sistemin yanısıra 16′lık ve 8′lik sistemlerde de yazılabilirler. Bu sayı sistemleriyle yazılmıs tamsayı sabit türleri için yukarıda verilen kurallar aynen geçerlidir. Çünkü bir sayıyı 16′lık ya da 8′lik sistemde yazmakla onun yalnızca görünümünü değistirmis oluruz. Sabit türleri gösterim biçimiyle değil nicelikle iliskilidir. C dilinde ikilik sayı sisteminde sabitlerin yazılması söz konusu değildir. SABİTLER 16′lık sistemde gösterim 0Xbbb.. biçimindedir. (b karakterleri basamakları gösteriyor, 9′dan büyük basamak değerleri için A, B, C, D, E, F karakterleri ya da a, b, c, d, e, f karakterleri kullanılabilir. 8′lik sistemde ise 0bbb.. biçimindedir. (nadir olarak kullanılır). Örnekler: 0×12 sayısı hex gösterimli bir tamsayı (int) sabit. 0X12L sayısı hex gösterimli bir uzun tamsayı (long) sabit. 0x1C205470 hex gösterimli bir uzun tamsayı (long) sabit. Çünkü (DOS’da) tamsayı sayı sınırını asmaktadır. 0x1934ul hex gösterimli isaretsiz uzun tamsayı (unsigned long) sabittir. 01234 oktal gösterimli tamsayı (int) sabit 0567L oktal gösterimli uzun tamsayı (long) sabit 0777U oktal gösterimli isaretsiz tamsayı (unsigned int) sabit 0452Lu oktal gösterimli (unsigned long) sabit. Sabitler yukarıda gösterildiği gibi her üç sayı sisteminde de yazılabilir, hatta bir ifade içinde kullanılan sabitler farklı sayı sistemlerinde de yazılmıs olabilirler, bu derleme zamanında error olusturacak bir neden olmayıp tamamen legaldir. … int x; x = 0x1AC2 + 345 + 01234; Gerçek Sayı Sabitleri (floating Constants) 1. float türden sabitler Nokta içeren ve sonuna f ya da F getirilmis sabitler float türden sabitler olarak ele alınırlar. Örneğin: 1.31F 10.F -2.456f float türden sabitlerdir. Not : Klasik C’de, yani C dilinin standartlastırılmasından önceki dönemde float türden bir sabit elde etmek için, sayının sonuna f eki alması yeterliydi yani nokta içermesi gerekmiyordu ama standartlarda yapılan değisiklikle artık float sabitlerin sonuna ek gelse de mutlaka nokta içermeleri gerekiyor. Yani derleyiciler 3f seklinde bir yazımı derleme zamanında bir hata (error) mesajıyla bildiriyorlar. 2. double türden sabitler Sonuna f ya da F eki almamıs nokta içeren sabitler ile float duyarlığını asmıs sabitler double sabitler olarak değerlendirilirler. Örneğin : -24.5 double türden sabittir. 3. long double türden sabitler long double türden sabitler noktalı ya da üstel biçimdeki sayıların sonuna l ya da L getirilerek elde edilirler : 1.34L 10.2L long double türden sabitlerdir. Gerçek Sayı Sabitlerinin Üstel Biçimde Gösterilmesi Gerçek sayı sabitleri üstel biçimde de ifade edilebilirler, bunun için sayının sonuna e ya da E eki getirilerek bir tamsayı yazılır. Bu, sayının 10x gibi bir çarpanla çarpıldığını gösterir.

Leave a Reply

Site Footer