Üye Girişi
x

Giriş Başarılı.

Yanlış Bilgiler.

E-mail adresinizi doğrulamalısınız.

Facebook'la giriş | Kayıt ol | Şifremi unuttum
İletişim
x

Mesajınız gönderildi.

Mesajınız gönderilemedi.

Güvenlik sorusu yanlış.

Kullandığınız Sosyal Medyayı Seçin
Yeni Klasör 8 yıldır sizin için en güvenli hizmeti veriyor...

Teknoloji dünyasındaki son gelişmeler ve sürpriz hediyelerimiz için bizi takip edin.

c ipuçlar ve hileler

> 1 <

hunter965

grup tuttuğum takım
Cezalı Grup
Hat durumu Cinsiyet Özel mesaj 45 ileti
Yer: kocaeli
İş: öğrenci
Kayıt: 08-04-2006 14:30

işletim sistemim [+][+3][+5] [-]
kırık link bildirimi Kırık Link Bildir! #17308 21-04-2006 18:34 GMT-1 saat    
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

Bunu ilk beğenen siz olun

Hata Oluştu


> 1 <