Tiêu chuẩn C không bắt buộc bất kỳ cách cụ thể nào để biểu thị các số đã ký âm.
Trong hầu hết các triển khai mà bạn có khả năng gặp phải, số nguyên có dấu âm được lưu trữ trong phần được gọi là phần bù hai . Cách chính khác để lưu trữ các số đã ký âm được gọi là phần bù của một người .
Phần bù của hai số N-bit x
được định nghĩa là 2^N - x
. Ví dụ, phần bù 8 bit của hai bit 1
là 2^8 - 1
, hoặc 1111 1111
. Phần bù 8 bit của hai bit 8
là 2^8 - 8
, trong nhị phân là 1111 1000
. Điều này cũng có thể được tính bằng cách lật các bit của x
và thêm một. Ví dụ:
1 = 0000 0001
~1 = 1111 1110
~1 + 1 = 1111 1111
-1 = 1111 1111
21 = 0001 0101
~21 = 1110 1010
~21 + 1 = 1110 1011
-21 = 1110 1011
Về cơ bản, phần bù của một số N bit x được định nghĩa là x với tất cả các bit của nó được lật.
1 = 0000 0001
-1 = 1111 1110
21 = 0001 0101
-21 = 1110 1010
Bổ sung của hai có một số lợi thế so với bổ sung của một. Ví dụ: nó không có khái niệm 'số 0 âm', vì lý do chính đáng là khó hiểu với nhiều người. Phép cộng, phép nhân và phép trừ hoạt động giống nhau với các số nguyên đã ký được triển khai với hai số được bổ sung giống như các số nguyên không dấu.