SORU
1 AĞUSTOS 2013, PERŞEMBE


Zor C kodu bu dört gerisinde kavramı

Neden bu kod çıktı C Sucks veriyor mu? Bunun ardında yatan düşünce nedir?

#include <stdio.h>

double m[] = {7709179928849219.0, 771};

int main() {
    m[1]--?m[0]*=2,main():printf((char*)m);    
}

here Test.

CEVAP
1 AĞUSTOS 2013, PERŞEMBE


Sayı 7709179928849219.0 64-bit double olarak aşağıdaki ikili gösterimi vardır:

01000011 00111011 01100011 01110101 01010011 00101011 00101011 01000011
 ^^^^^^^ ^^^^---- -------- -------- -------- -------- -------- --------

üs işareti; ^ ve mantis - (üs olmadan değeri yani) konumunu gösterir.

Temsili beri kullandığı ikili üs ve mantis, bir numara tarafından üs aralıklarla iki katına. Senin program mı tam 771 kez üs olan başladı 1075 (ondalık gösterimi 10000110011) olur 1075 771 = 1846 sonunda; ikili temsil 1846 11100110110. Sonuç desen bu gibi görünüyor:

01110011 01101011 01100011 01110101 01010011 00101011 00101011 01000011
-------- -------- -------- -------- -------- -------- -------- --------
0x73 's' 0x6B 'k' 0x63 'c' 0x75 'u' 0x53 'S' 0x2B ' ' 0x2B ' ' 0x43 'C'

Bu desen, sadece ters basılmış görmek dize karşılık gelir. Aynı zamanda, dizinin ikinci elemanı sıfır, null sonlandırıcı sağlayan, dize 14 ** geçiş için uygun hale gelir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CrazyMan

    CrazyMan

    14 Mayıs 2008
  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • SuicideSheeep

    SuicideSheee

    8 Ocak 2012