어떤 비트 연산보다도 2의 보수라는 것이 뭔지 몰라서 인터넷을 찾아보다가
기억을 하기 위해 따로 정리하기로 하였다.
통용적으로 사용되는 2의 보수와 C언어에서 통용되는 2의 보수가 약간 다르다.
우선 가장 큰 비트를 우리는 부호를 표현하는 비트로 놔두어 계산한다.
0이면 양수, 1이면 음수를 표현하게 한다.
0000 0000 .... 0000 1111 = 15
1000 0000 .... 0000 1111 = -15
하지만 이런식으로 표현해버리면 연산과정에서 오버헤드가 높게 발생하고
0을 가리키는 수가 2개가 되어버린다.
0, -0 차이가 없다.
0000 0000 .... 0000 0000 = 0
1000 0000 .... 0000 0000 = -0
때문에 컴퓨터에서 사용하는 2의 보수는 다르게 계산한다.
일반적으로 32-bit라고 할 때..
**왜 32bit냐면.. MIPS, RISC Architecture 등등.. 처음에 32비트로 나와서 그렇다.
컴퓨터에선 이렇게 알아듣도록 한다.
????? 뭔데?
이게 바로 -a를 표현하는 방식이다.
?????
어려운데???
다시 설명하자면
하지만 32비트로 하면 귀찮으니까 줄여보자
0111 -> 7이다.
더해서 0이 되는 수가 있다면 그것은 바로 -7이 될 것이다.
어떤 수가 될까 생각해보니
1001 -> 값을 모른다하자 -> 하지만 위의 값과 더하면 0이 되는 것은 확실함.
그래서 어떤 수의 보수를 찾고자하면
그 수를 not연산을 해주어 부호를 반전시켜준다.
0111 -> 1000
거기에 +1을 해준다
1001
그러면 보수에 해당하는 값이 나온다.
'문제풀이(Problem Solving) > C++ 문제풀이에 유용한 것들' 카테고리의 다른 글
Stack, 스택 , 자료구조 [CPP] (0) | 2021.04.22 |
---|---|
Queue, 큐 , 자료구조 [CPP] (0) | 2021.04.22 |
[C언어] 기본 함수, 메서드 만들기 (0) | 2020.07.02 |
[C++] 기본 입력과 출력 (0) | 2020.07.01 |
[C언어] 숫자 입력, 출력하기 (0) | 2020.07.01 |