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