Khi bạn gán một giá trị âm cho một biến không dấu thì nó sẽ sử dụng phương thức bổ sung 2 để xử lý và trong phương pháp này, nó chuyển tất cả 0 thành 1 và tất cả 1 thành 0 rồi thêm 1 vào đó. Trong trường hợp của bạn, bạn đang xử lý int có 4 byte (32 bit) vì vậy nó cố gắng sử dụng phương pháp bổ sung của 2 trên số 32 bit khiến bit cao hơn bị lật. Ví dụ:
┌─[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