C 표준은 음수 부호를 나타내는 특정 방법을 요구하지 않습니다.
발생할 수있는 대부분의 구현에서 음의 부호있는 정수는 2의 보수에 저장됩니다 . 음의 부호있는 숫자를 저장하는 다른 주요 방법을 1의 보수 라고 합니다.
N 비트 수의 2의 보수 x
는로 정의됩니다 2^N - x
. 예를 들어, 8 비트의 2의 보수는 1
이다 2^8 - 1
, 또는 1111 1111
. 8 비트의 2의 보수는 8
있다 2^8 - 8
진수 인 1111 1000
. 이것은 비트를 뒤집고 x
1을 더하여 계산할 수도 있습니다 . 예를 들면 다음과 같습니다.
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
N 비트 수 x의 보수는 기본적으로 모든 비트가 뒤집힌 x로 정의됩니다.
1 = 0000 0001
-1 = 1111 1110
21 = 0001 0101
-21 = 1110 1010
2의 보수는 1의 보수에 비해 몇 가지 장점이 있습니다. 예를 들어, '음의 제로'라는 개념이 없기 때문에 많은 사람들에게 혼란을 줄 수 있습니다. 덧셈, 곱셈 및 뺄셈은 부호없는 정수와 마찬가지로 2의 보수로 구현 된 부호있는 정수와 동일하게 작동합니다.