Bu konuda gerçekten "güvenilir" bir kaynak bulamıyorum, çünkü bu büyük olasılıkla bir konvansiyon meselesidir ve terminoloji genellikle çok tutarsızdır. Ancak, Robert Seacord'un " C ve C ++ 'da Güvenli Kodlama " dan aşağıdaki alıntı , durumu anlamamı özetliyor:
Bir tamsayı maksimum değerinin üzerinde artırıldığında veya minimum değerinin 3 üzerinde olduğunda bir tamsayı taşması meydana gelir . Tamsayı taşmaları temel temsil ile yakından ilişkilidir.
Dipnot şunları söylemeye devam ediyor:
[3] Bir tamsayıyı minimum değerinin ötesine düşürmek, genellikle teknik olarak bu terim bir kayan nokta koşulu anlamına gelse de, bir tamsayı alt akışı olarak adlandırılır .
Tamsayı taşması olarak adlandırmamızın nedeni , türde değeri temsil etmek için yeterli alan bulunmamasıdır. Bu anlamda, bir arabellek taşmasına benzer (aslında arabellek sınırını geçmek yerine, genellikle etrafı saran davranışlar gösterir. *) Bu açıdan bakıldığında, INT_MIN - 1
ve arasında hiçbir kavramsal fark yoktur INT_MAX + 1
. Her iki durumda da int
veri türünde her iki değeri temsil etmek için yeterli alan yoktur - bu yüzden elimizde bir taşma vardır .
X86 ve x86_64 işlemci mimarilerinde, bayrak kaydının bir taşma biti içerdiğine dikkat etmek de yararlı olabilir . Taşma biti, işaretli bir tam sayı aritmetik işlemi taştığında ayarlanır. İfade INT_MIN - 1
taşma bitini ayarlayacaktır. ("Taşma" biti yoktur.) Açıkça, AMD ve Intel'deki mühendisler, veri türüne sığmayacak kadar çok biti olan bir tamsayı aritmetik işleminin sonucunu tanımlamak için "taşma" terimini kullanırlar. değer sayısal olarak çok büyük veya çok küçük.
* Aslında, C'de imzalı tamsayı taşması aslında tanımlanmamış bir davranıştır, ancak Java gibi diğer dillerde, ikisinin tamamlayıcı aritmetiği etrafa sarılır.
INT_MIN - 1
ya daINT_MAX + 1