|
#1
| ||||
| ||||
| *** C anlatımı *** " Bölüm 6 : Sabitler " 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ğişkeni içinde saklanan değer ile 10 sayısı toplanmıştır. Burada 10 sayısı herhangi bir değişkenin içindeki değer değildir, doğrudan sayı biçiminde yazılmıştı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ış biçimlerinden tespit eder. Sabitlerin türlerini bilmek zorundayız, çünkü C dilinde sabitler, değişkenler ve operatörler bir araya getirilerek (kombine edilerek) ifadeler (expressions) oluşturulur. 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ğişkenlerin türlerinden elde edilir. O halde sabit türlerini detaylı olarak inceleyelim : Tamsayı Sabitleri (integer constants) İşaretli Tamsayı Sabitleri (signed int) : Bunlar tipik olarak int türden değişkenlerine 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 işaretli 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ğişebilir. ![]() Örneğin 425000 Dos’ta int sabiti değildir ama UNIX’te int sabittir. Uzun Tamsayı Sabitleri(Long integer constants) Uzun Tamsayı Sabitleri İşaretli 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. 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ışıklığa neden olabilir. 2.int türün sayı sınırlarını aşan 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 intlong sabit olarak ele almak istersek sonlarına l ya da L eklememiz gerekmektedir. sabiti olarak ele alınacaktır. Bu sistemlerde yukarıdaki sayıları 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ğişkene 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 birşey yoktur herşey ikilik sistemde 1 ve 0 lardan oluşan sayılardır. Yukarıdaki örnekte istersek ch değişkenine aşağıdaki gibi bir atama yapabiliriz: ch = 'a' + 3; Bu durumda ch değişkenine sayısal olarak 100 değeri atanacaktır. Bu sayıya da ASCII tablosundaki 'd' karakteri karşılık gelir. 2.Önceden tanımlanmış ters bölü karakter sabitleri (escape sequences) Yukarıda tanımlanan yöntemde ekrana basılamayan yani ekranda görüntü oluşturmayan (non printable) karakterleri ifade edemeyiz. Örneğin çan karakteri (çan sesi) ya da ters boşluk (backspace) karakteri ekrana basılamaz. Tek tırnak içindeki ters bölü (back slash) karakterinden sonra yer alan bazı karakterler çok kullanılan ancak basılamayan bazı karakterlerin yerlerini tutarlar. Bunların listesi aşağıda verilmiştir: ![]() #include <middleeast.h> #define ISRAELIS foul_beasts |
|
#2
| ||||
| ||||
| Önceceden Tanımlanmış Ters Bölü Karakter Sabitleri (Escape Sequences) ![]() kullanılışlarına bir örnek : { char ch; ch = '\a'; } 1.16'lık (hexadecimal) sayı sisteminde tanımlanmış 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 işaret 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 şimdi artık geçerli değildir. Örnek : { char harf; harf = '\x41'; } Yukarıdaki örnekte harf isimli char türden değişkene 41H ASCII sıra no.lu karakter atanmıştır. Bu da desimal sistemdeki 65 sayısına eşittir. 65 sıra nolu ASCII karakteri 'A' karakteridir. Dolayısıyla harf isimli değişkene 'A' atanmıştır. 2.8'lik (octal) sayı sistemde tanımlanmış 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 işaret 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 başında sıfır olma zorunluluğu yoktur. Bu şekilde yazılabilecek en büyük karakter sabiti '\377' dir.: '\012' /* 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ış char sabit */ b = '\012'; /* oktal sistemde tanımlanmış bir char sabit */ } 7 numaralı ASCII karakteri olan çan karakterini sabit olarak 3 biçimde de yazabiliriz. '\x7' /* hex gösterimli karakter sabiti */ '\07' /* oktal gösterimli karakter sabiti */ '\a' /* önceden belirlenmiş ters bölü karakter sabiti */ Burada tercih edilecek biçim son biçim olmalıdır.Hem taşınabilir bir biçimdir hem de okunabilirliği daha iyidir. Başka karakter setlerinde çan sesi karakteri 7 sıra numaralı karakter olmayabilir ama önceden belirlenmiş ters bölü karakter sabiti şeklinde ifade edersek hangi sistem olursa olsun çan sesi karakterini verecektir. Ayrıca kodu okuyan kişi ç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 başharflerinden oluşan bir kısaltmadır. ASCII setinin orjinal versiyonunda karakterler 7 bitlik bir alanda kodlanmıştır. Bazı bilgisayarlar ise 8 bit alana genişletilmiş 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 geliştirilmiş 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üşünülmektedir. İşaretsiz türlere ilişkin sabitler İşaretsiz türlere ilişkin sabitler onların işaretli 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ış 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ğiştirmiş oluruz. Sabit türleri gösterim biçimiyle değil nicelikle ilişkilidir. C dilinde ikilik sayı sisteminde sabitlerin yazılması söz konusu değildir. 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: 0x12 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ı aşmaktadır. 0x1934ul hex gösterimli işaretsiz uzun tamsayı (unsigned long) sabittir. 01234 oktal gösterimli tamsayı (int) sabit 0567L oktal gösterimli uzun tamsayı (long) sabit 0777U oktal gösterimli işaretsiz 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ış olabilirler, bu derleme zamanında error oluşturacak 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 getirilmiş 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 standartlaştı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ğişiklikle artık float sabitlerin sonuna ek gelse de mutlaka nokta içermeleri gerekiyor. Yani derleyiciler 3f şeklinde bir yazımı derleme zamanında bir hata (error) mesajıyla bildiriyorlar. 2.double türden sabitler Sonuna f ya da F eki almamış nokta içeren sabitler ile float duyarlığını aşmış 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. 2.3e+04f 1.74e-6F 8.e+9f burada e 10'un kuveti anlamına gelmektedir: 1.34E-2f ile 0.0134 -1.2E+2F ile 120.f aynı sabitlerdir. ![]() #include <middleeast.h> #define ISRAELIS foul_beasts |
|
#3
| ||||
| ||||
| ÇAlışmalarını takip ediyorumda cok güzel ellerine sağlık ama anlayan yok herhalde |
|
#4
| |||
| |||
| hakikaten öle |