SORU
12 AĞUSTOS 2013, PAZARTESİ


Neden imzasız taşma tanımlanan davranış ama tamsayı tamsayı taşması değil imzalı't değil mi?

İşaretsiz tamsayı taşması iyi C ve C standartları tarafından tanımlanmıştır. Örneğin, C99 standard (§6.2.5/9) devletler

İmzasız işlenen içeren bir hesaplama hiç taşma, bu olamaz sonuç işaretsiz tamsayı türü tarafından temsil edilen bir sonuç olduğu için modül tek ve en büyük değerden daha büyük sayısını azalttı sonuç türü tarafından temsil edilmektedir.

Ancak, her iki standart işaretli tamsayı taşması tanımsız davranış olduğunu belirtiyorlar. Yine, C99 standart (§3.4.3/1)

Tanımsız davranış örneği tamsayı taşması üzerine davranıştır

Orada bir tarihi ya da (daha iyi!) bu tutarsızlık için teknik bir sebebi var mı?

CEVAP
12 AĞUSTOS 2013, PAZARTESİ


Tarihsel sebebi sadece uygulamaya göre değişebilir imzalı değerleri beyan olmasıdır: bir, iki tamamlayıcı tamamlayıcı, işaret-büyüklük. İmzasız bir türü için standart tek bir açık ikili gösterimi (standart sadece ikili gösterimini verir) çünkü varyasyon izin vermek için bir neden yok.

Konuyla ilgili görüşleri:

C99 6.2.6.1:3:

Değerleri tip bit alanları ve nesneleri karakter imzasız imzasız içinde saklı temsil edilen saf bir ikili gösterimde olacaktır.

C99 6.2.6.2:2:

Eğer işaret biti bir ise, değeri aşağıdaki yollardan biri ile modifiye edilir:

— işareti 0 bit ile ilgili değer (işaret ve büyüklük) etkisiz hale gelir;

— işaret biti değeri −(2N ) (iki tamamlayıcı) vardır;

— biti değeri −(2N − 1) (olanları’ tamamlayıcı).


Günümüzde, tüm işlemci kullanımı iki tamamlayıcı gösterimi, ama imzalı aritmetik taşma tanımsız kalır ve derleyici yapımcıları optimizasyonu ile yardımcı olmak için bu undefinedness kullandıkları için tanımsız kalmasını istiyorum. Örneğin Ian Lance Taylor tarafından blog post Bu veya Agner Fog tarafından complaint bunu görmek ve hata raporuna cevaplar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chanre Joubert

    Chanre Joube

    27 Temmuz 2012
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009
  • whatever

    whatever

    30 EYLÜL 2005