printf("hedenin degeri: %d", hede);şimdi şunu bir deneyin bakalım.
printf("%d %d", 4294967298, 8);ılk parametre 32 bit'i geçen bir değer. Dolayısıyla ekrana ilk yazılacak değerin 4294967298 olmaması beni pek şaşırtmıyor. Peki ya ikinci değerin 8 yerine 1 olmasına ne demeli?
Bu güne kadar hep %'lerle parametrelerin indexlerinin birebir örtüşmesi gerektiğine inanmıştım ancak anlaşılan durum pek de bu biçimde işlemiyormuş.
4294967298 sayısını 64 bit binary olarak yazacak olursak.
4294967298 = %000000000000000000000000000000010000000000000000000000000000001032'şer bite parçalayınca da
%00000000000000000000000000000001 = 1
%00000000000000000000000000000010 = 2yani high dword 1, low dword 2. Yani 4294967298 yerine 32bit kapasiteli %d'nin low dword'ü yazması gayet normal. ancak sonraki %d'nin yazdığı 1 de aslında ilk parametre'nin high dword'ü. peki ya 8 nereye gitti?
printf("%d %d %d", 4294967298, 8);Bir tane daha %d eklediğimizde 2. parametre 3. %d'de karşımıza çıkıyor. Tabii ki bunun yerine 64bit, yani long long tipindeki değişkeni;
printf("%lld %d", 4294967298, 8);bu biçimde %lld ile yazdırırsak parametreler olması gerektiği şekilde pattern ile örtüşüyor. ilginç değil mi?