1.25 m * geçirmeden C, boyutu operatör döner 8 bayt geçen 2.5 m ama 4 bayt 2 | Netgez.com
SORU
30 Mayıs 2013, PERŞEMBE


1.25 m * geçirmeden C, boyutu operatör döner 8 bayt geçen 2.5 m ama 4 bayt 2

sizeof operatör aşağıdaki sonuçlar üretiyor neden anlamıyorum:

sizeof( 2500000000 ) // => 8 (8 bytes).

... aşağıdaki yaptığımda: 8, ve döndürür

sizeof( 1250000000 * 2 ) // => 4 (4 bytes).

... 8 yerine 4, döner beklediğim gibi). Birisi sizeof (veya veri tipi) ifade boyutunu belirler nasıl ve benim özel durumda bu neden oluşmasını açıklamak miyim?

En iyi tahminim sizeof operatör derleme zamanlı bir operatördür.

Kelle Soru:Bu ifadeleri değerlendirmek ve beklenen benim çıkış (döküm) olmadan üretebileceği bir çalışma süresi operatör var mı?

CEVAP
30 Mayıs 2013, PERŞEMBE


2500000000 derleyici doğru yorumlar int long (ya da long long ya uygun bir türü) gibi bir uyum yok. 1250000000 yok, 2. sizeof parametredeğil değerlendirdiderleyici çarpma sığmayan imkan yok yani , bir 16* *ve int bir boyutunu verir.

Eğer parametre değerlendirildi olsa da, olası bir taşma (ve tanımsız davranış), ama muhtemelen hala 4 elde edersin.

Burada:

#include <iostream>
int main()
{
    long long x = 1250000000 * 2;
    std::cout << x;
}

çıkış tahmin edebilir misiniz? Eğer 2500000000, sanıyorsan yanılıyorsun. Bu tür anlatım 1250000000 * 2 int, çünkü işlenen int int ve çarpma değil otomatik olarak yüklenecektir terfi için daha büyük bir veri yazarsanız plana uymuyor.

http://ideone.com/4Adf97

Yani burada, gcc herhangi bir sayı olabilir ama tanımsız davranış -1794967296, diyor. Bu sayıda uygun int bir haline geliyor.

Ayrıca, eğer dökme bir işlenen için beklenen bir türü (gibi döküm tamsayılar zaman ayıran arıyorsan tamsayı olmayan bir sonuç), göreceksin ki bu çalışma:

#include <iostream>
int main()
{
    long long x = (long long)1250000000 * 2;
    std::cout << x;
}

verimleri doÄŸru 2500000000.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • MusicDeluxeTV

    MusicDeluxeT

    14 Mayıs 2010
  • The10HourMan

    The10HourMan

    28 EYLÃœL 2012