12
varsayalımuzun uzun 8 bayt, ancak tamsayı taşımı alıyorum?
long long b = 5*1024*1024*1024; // 5 gigs, small enough for 64 bits
printf ("%lu\n",sizeof(long long)); // prints 8 (bytes) = 64 bits
ama derleyici yakınır:
warning: integer overflow in expression [-Woverflow]
Neden taşması, ne ben eksik geliyor? bir taşma giden çok int
aritmetik ifade gerçekleştirilir
canım, haklısın. Biri her zaman f veya (döküm) yüzenleri eklediğini düşünür ... ama asla uzun sürmez :(Takdir et –
@DervinThunk - sabitlerle unutmak kolay – teppic
Daha kesin olarak, sabitler int türündedir ("tamsayı" dır daha genel bir terimdir, “char” dan “long long” ve muhtemelen daha fazlası) her şeyi kapsar. Eğer LL'yi en sağa 1024'e uygularsanız, hala bir taşma elde edebilirsiniz, 5 * 1024 * 1024 * 1024LL', '' 5 * 1024 * 1024', 'int' olarak değerlendirilmektedir - yasal olarak 16 bit kadar dar olabilir. En güçlü çözüm muhtemelen' 5LL * 1024LL * 1024LL * 1024LL' yazmaktır. - veya '5LL * (1LL << 30) '. –