Sonuç negatif olduğunda, işaretsiz bir tamsayıyı aynı türden başka bir tam sayıdan çıkarırken bir sorun olduğuna inanan birinden kodla karşılaştım. Yani bu tür bir kod, çoğu mimaride çalışsa bile yanlış olacaktır.
unsigned int To, Tf;
To = getcounter();
while (1) {
Tf = getcounter();
if ((Tf-To) >= TIME_LIMIT) {
break;
}
}
Bu, bulabildiğim C standardından belli belirsiz alakalı tek alıntıdır.
İşaretsiz işlenenleri içeren bir hesaplama asla aşırı akış yapamaz, çünkü sonuçta ortaya çıkan işaretsiz tamsayı türüyle temsil edilemeyen bir sonuç, sonuçta ortaya çıkan türle temsil edilebilecek en büyük değerden bir büyük olan sayıya indirgenir.
Sanırım bu alıntı, doğru işlenen daha büyük olduğunda işlemin modulo kesilmiş sayılar bağlamında anlamlı olacak şekilde ayarlandığı anlamına gelebilir.
yani
0x0000 - 0x0001 == 0x 1 0000 - 0x0001 == 0xFFFF
uygulamaya bağlı işaretli semantiği kullanmanın aksine:
0x0000 - 0x0001 == (işaretsiz) (0 + -1) == (0xFFFF ve ayrıca 0xFFFE veya 0x8001)
Hangi veya hangi yorum doğrudur? Hiç tanımlanmış mı?