Коли ви присвоюєте негативне значення незмінній змінній, тоді він використовує метод доповнення 2, щоб обробити його, і в цьому методі він перевертає всі 0 на 1, а всі 1 на 0, а потім додає 1 до нього. У вашому випадку ви маєте справу з int, який має 4 байти (32 біти), тому він намагається використовувати метод доповнення 2 на 32-бітному номері, що призводить до перекидання верхнього біта. Наприклад:
┌─[student@pc]─[~]
└──╼ $pcalc 0y00000000000000000000000000000101 # 5 in binary
5 0x5 0y101
┌─[student@pc]─[~]
└──╼ $pcalc 0y11111111111111111111111111111010 # flip all bits
4294967290 0xfffffffa 0y11111111111111111111111111111010
┌─[student@pc]─[~]
└──╼ $pcalc 0y11111111111111111111111111111010 + 1 # add 1 to that flipped binarry
4294967291 0xfffffffb 0y11111111111111111111111111111011