İki 32 bitlik tamsayı eklemek, tamsayı taşmasına neden olabilir:
uint64_t u64_z = u32_x + u32_y;
32 bitlik tam sayılardan biri önce dönüştürülür veya 64 bitlik bir tam sayıya eklenirse bu taşma önlenebilir.
uint64_t u64_z = u32_x + u64_a + u32_y;
Ancak, derleyici eklemeyi yeniden düzenlemeye karar verirse:
uint64_t u64_z = u32_x + u32_y + u64_a;
tamsayı taşması yine de olabilir.
Derleyicilerin böyle bir yeniden sıralama yapmasına izin veriliyor mu yoksa sonuç tutarsızlığını fark edip ifade sırasını olduğu gibi tutmaları için onlara güvenebilir miyiz?
((uint32_t)-1 + (uint32_t)1) + (uint64_t)0
sonuçlanır 0
, oysa (uint32_t)-1 + ((uint32_t)1 + (uint64_t)0)
sonuçları 0x100000000
ve bu iki değerin eşit değildir. Bu nedenle, derleyicinin bu dönüşümü uygulayıp uygulayamayacağı önemlidir. Ama evet, standart sadece işaretli tamsayılar için "taşma" kelimesini kullanır, işaretsiz değil.
uint32_t
değerler olarak görünüyorsunuz - ki bunlar taşmaz, sarılırlar. Bunlar farklı davranışlar değil.