TeknoTR  

Geri Dön   TeknoTR > Webmasterler için > Programlama
Üye Ol SSS Sxe indir Sosyal Gruplar Takvim Resim Galerisi Etiketler Bütün Forumları okunmuş kabul et

C İpuçları Ve HileleR

Programlama bölümünde C İpuçları Ve HileleR konusu , Önemli Not: Alıntıdır. Bu yazıda sizlere C’de programlama yaparken kullanabileceğiniz bazı ipuçlarından ve hilelerden bahsetmek istiyorum. Burada anlatacaklarımdan bazıları genel kurallar içinde C programı yazmaya aykırı kod parçaları da olabilir ama adı üstünde, konumuz: "Hileler". Eğer bir değişkenin byte’larını ayrı ...

Cevapla
 
LinkBack Konu Seçenekleri
Eski 06-12-2007, 14:35   #1 (permalink)
Onursal Üye
 
stromper - ait Avatar
 
Giriş: 02-08-2007
Yaş: 28
Mesajlar: 10.389
Rep Puanı: 7866
stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11stromper Rütbe Artı +11
Rep Gücü: 157
E-Güven: (7/100)

C İpuçları Ve HileleR


Önemli Not: Alıntıdır.
Bu yazıda sizlere C’de programlama yaparken kullanabileceğiniz bazı ipuçlarından ve hilelerden bahsetmek istiyorum. Burada anlatacaklarımdan bazıları genel kurallar içinde C programı yazmaya aykırı kod parçaları da olabilir ama adı üstünde, konumuz: "Hileler".

Eğer bir değişkenin byte’larını ayrı ayrı değiştirmek istiyorsanız, bunu yapmanın kolay bir yolu var. Örneğin x değişkeninizi unsigned int olarak tanımladınız. Böylelikle x, 2byte’lık bir değişken olmuştur. x değişkeninin 2 byte’ını da ayrı ayrı değiştirmek için, char kullanılır. Char, her zaman bir byte olur. Her byte’ı ayrı ayrı ele alınıp değiştirmek için derleyiciye o byte’ların char olduğunu göstermemiz gerekir ve sonra da değişiklik yapmamız gerekir:
İlk byte’ı 4 yapalım: *((unsigned char *)&i) = 4;

İkinci byte’ı 15 yapalım: *(((unsigned char *)&i) + 1) = 15;

Intel tabanlı bilgisayarlarda bu işlemler x’in değerini şöyle değiştirecektir: 15*256+4=3844

Bu hileyi kullanırken bir çok bilgisayar sisteminde değişken tiplerinin farklı kaydedildiklerine dikkat edin. Mesela bir başka sistemde sonuç: 4*256+15=1039 olabilir! Değişken tiplerinin uzunlukları da standard değildir. Bir tamsayı 2 byte iken başka sistemde 1 byte olabilir!

C’deki çok yararlı işlemlerden biri de ?: dir. Örneğin;
i = i == 4 ? 0 : i + 1; kod satırında I 4’ise I’yi sıfırlar, değilse o anki değerine 1 ekler.

Eğer bir değişkenin adres değerini gerçek değerinden daha fazla kullanıyorsanız, her seferinde & işaretini kullanmak yerine 1 elemanlı bir dizi tanımlayabilirsiniz:
int main(void)
{
void oku(int *toread), degistir(int *toread), islem(int *toread);

int deger;

oku(°er);

degistir(°er);

islem(°er);

printf("%d", deger);
}


yerine;

int main(void)
{
void oku(int *toread), degistir(int *toread), islem(int *toread);

int deger[1];

oku(deger);

degistir(deger);

islem(deger);

printf("%d", *deger);
}


kullanılabilir.

Sadece iki değişken ile swap(yer değiştirme) işleminin yapabilir misiniz? İşaretçiler ile biraz düşünülürse bu mümkün!
a’nın 1, b’nin 2 olduğunu düşünürsek;

a^=b;

b=^a;

a^=b;

Bu işlem üçüncü bir değişkene gerek kalmadan iki değerin yerini değiştirmemizi sağlar. Ayrıca bu işlem çok hızlıdır. Çünkü;

a’nın 9 (1001 ikilik sistemde), b’nin de 6 (0110 ikilik sistemde) olduğunu varsayalım:

kodda adım adım ilerlersek,

a^=b; : a=a XOR b, a = 1111

b=^a; : b=a XOR b, b=1001

a^=b; : a=a XOR b, a=0110

Sonuç, yer değiştirme tamamlandı!!

İki değer arasında değişip duran bir değişken nasıl elde edilir? Bunu bir örnekle açıklayalım. Örneği istenilen iki değer çevirmek gerçekten de çok kolay. Örneğimizde 8 ve 3 değerlerini seçelim.
int a = 3, i;

for (i = 0; i < 10; i++)
{
a = 11 - a;

printf("a = %d\n", a);
}

Bu kod bizlere 3 ve 8 arasında değişip duran a değişkenini göstermektedir.

a, başlangıçta 3 yapılır. Sonra bir for döngüsünde a değişkenine 11-3 değeri atanır ve 8

olur. Döngünün diğer tekrarında a değişkenine 11-8 değeri atanır ve böyle sürüp gider.

Bu algoritma için şöyle bir genel formül yaratabiliriz:

x ve y arasında değişen bir değişken için, sonuç = (x + y) - sonuç ‘tur.

stromper isimli üyemiz çevrimdışıdır. (Offline)  
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Alıntı ile Cevapla
Cevapla


Konuyu Toplam 1 üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 
Konu Seçenekleri

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-KodlarıKapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık
Gitmek istediğiniz klasörü seçiniz


Şu an saat 09:17 .
Tarih 07-10-2008


Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd
Türkçe Çeviri : ach

eXTReMe Tracker


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192