우리가 컴퓨터 숫자를 쓸때 앞에 쓰는 부호 +,-는 0과1로 되어있다.
-1은 2진수로 표시하면 1001이된다.
그리고 1은 0001이다.
-1과 1을 더하면 0이되어야하지만
1001 + 0001은 1010이라는 값이 나와 이상한 값이 나오게된다.
이때 사용하는게 2의보수와1의보수이다.
1의 보수란
비트 반전 0은 1로, 1은 0으로 변환 하는것이다.
0001의 1의보수는 1110
1001의 1의보스는 0110이다.
1의보수한 값인 1110과 0110을 더하면 0000이라는 우리가 원한 값을 얻을수있다.
하지만 1의 보수만을 사용하면 비트 반전을 너무 많이 해야한다는 단점이 존재한다.
그래서 등장한게 2의보수이다.
2의부수란
1의 보수 취한 값에 +1한것이 2의보수다
1001의 1의보수인 0110
0001의 2의보수인 0010
0110 + 0010을 하게되면 0000이라는 값을 얻을수있다.
1의 보수란
비트 반전 0은 1로, 1은 0으로 변환 하는것이다.
1의보수만으로 음수를 처리 할수있지만 굳이 2의보수를 사용하는 이유는
쓸대없는 연산을 줄일수가있다.
1의 보수를 할때에는 비트연산을 총 8번실행하였다.
만약 4비트가아닌 16비트였다면 32번 실행해야되었다.
하지만 2의보수를 사용하였을때는 4비트의 비트연산과 +1만 해주면 되었다.
4비트에서는 별로 차이가 없지만 만약 64비트였을경우에는 엄청난 차이가 생겼을것이다.
1의보수 = n2번의 비트반전
2의보수 = n2+1번의 비트반전
'C++' 카테고리의 다른 글
C++ 연산자 (0) | 2020.08.14 |
---|---|
C++ 진수 (0) | 2020.08.14 |
C++ 문자 (0) | 2020.08.13 |
C++ 변수와 자료형 (0) | 2020.08.12 |
C++ 콘솔에 문자열 출력하기 (0) | 2020.08.11 |