![]() |
|
|
#1 (permalink) | ||
|
Süper Mod
![]() ![]() ![]() Üyelik tarihi: Kas 2007
Nerden: ewden(:
Mesajlar: 5.997
Konular: 3048
Üye No: 11341
Ruh halim:
Rep Gücü : 475
Rep Puanı : 9013
Rep Seviyesi :
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
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) Code: { void oku(int *toread), degistir(int *toread), islem(int *toread); int deger; oku(°er); degistir(°er); islem(°er); printf("%d", deger); } yerine; Code: 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. Code: 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.
__________________
BeLqide bu dünya başqa bir gezegenin cehennemidir..!!? SEN GİDİNCE YALNIZ KALACAĞIM.YALNIZLIKTAN KORKMUYORUM DA YA CANIM ELLERİNİ TUTMAK İSTERSE.. ![]() ![]() SiLemıyosaN KaRaLayacaksıN...GideRkeN Kaç Kere BaktıN ArkaNa? ![]() !..... Wayyy Beee!!! İçimizdeki Çocuk Da Gayrı Meşru Çıktı .....!
Mrs. Wampir€ |
||
|
|
|
![]() |
| Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz! |
| Konu Araçları | |
| Stil | |
|
|
Benzer Konular
|
||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | son Mesaj |
| Cs 1.6 Hileleri 4 in 1 | wanted | Counter Strike | 6 | 05-10-2008 13:55 |
| msn hileleri | game ower | Msn, Icq, Yahoo Messenger | 1 | 08-07-2008 21:15 |
| SX1 ciler buraya ipuçları fln fln!! | ShockWave | Siemens | 0 | 15-04-2008 21:51 |
| Vista’dan hayatınızı kolaylaştıracak ipuçları! | WaMPiR_CaDı | Windows Vista | 1 | 17-01-2008 16:18 |
| Amatör kameramanlar için en iyi ipuçları | Bilgisayarcı | Bilgisayar Haberleri | 0 | 16-10-2007 16:10 |