Menambahkan dua bilangan bulat 32-bit dapat menghasilkan luapan bilangan bulat:
uint64_t u64_z = u32_x + u32_y;
Kelebihan ini dapat dihindari jika salah satu dari bilangan bulat 32-bit pertama kali dicor atau ditambahkan ke bilangan bulat 64-bit.
uint64_t u64_z = u32_x + u64_a + u32_y;
Namun, jika kompilator memutuskan untuk menyusun ulang penambahan:
uint64_t u64_z = u32_x + u32_y + u64_a;
overflow integer mungkin masih terjadi.
Apakah kompiler diperbolehkan melakukan pengubahan urutan seperti itu atau dapatkah kita mempercayai mereka untuk melihat hasil yang tidak konsisten dan menjaga urutan ekspresi sebagaimana adanya?
((uint32_t)-1 + (uint32_t)1) + (uint64_t)0
menghasilkan 0
, sedangkan (uint32_t)-1 + ((uint32_t)1 + (uint64_t)0)
hasilnya 0x100000000
, dan kedua nilai ini tidak sama. Jadi penting apakah kompilator dapat menerapkan transformasi itu atau tidak. Tapi ya, standarnya hanya menggunakan kata "overflow" untuk integer bertanda tangan, bukan unsigned.
uint32_t
nilai tambah - yang tidak meluap, mereka membungkus. Ini bukanlah perilaku yang berbeda.