본문 바로가기

C++

[C++] 음수를 비트로 표현하는 방법(2의 보수), 진법 표현

비트는 0과 1로 조합되는 데이터를 나타내는 최소 단위이다.

8비트면 -128 ~ 127까지의 정수를 표현할 수 있다.

1번째 자리부터 7번째 자리까지는 양의 정수를 표현하지만 8번째 자리의 비트가 1이 되면 마이너스가 붙는다.

01111111은 127이지만 10000000은 -128이 된다. 여기에 2~8번째 자리의 비트값을 더해서 계산한다.

이 경우는 1바이트일 때 이야기이고 데이터 크기가 커져도 동일하게 최상위 비트가 1이 되면 마이너스가 붙는다.

원래 데이터에 마이너스만 붙이는 방법은 2의 보수를 이용하는데, 1의 보수(1인 비트는 0으로 , 0인 비트는 1로 반전한 후)에 1을 더해준다. ex) 01001010 => 10110101 + 1 => 10110110

1의 보수라고 부르는 이유는 각 자리수를 모두 1로 만들어줘서, 2의 보수는 각 자리를 모두 2로 만들어줘서?(뇌피셜임)

 

이진법은 보통 앞에 0b를 붙여 표기하고 ex) 0b110 => 4

16진법은 보통 앞에 0x를 붙여 표기한다. ex) 0x1A => 26

이진법에서 16진법으로 변환하는 법은 4자리수마다 끊어서 변환하는 것이다.

ex) 0b10010101 => 1001 / 0101 => 0x95

 

참고

8bit = 1byte

16bit = 2byte = word

32bit = 4byte = 2word = dword

64bit = 8byte = 4word = 2dword = qword

 

'C++' 카테고리의 다른 글

[C++] 포인터 vs 참조(레퍼런스)  (0) 2022.06.20
[C++] 정수형, 불리언, 부동소수점  (0) 2022.06.19
[C++] RAII  (0) 2022.06.17
[C++] weak_ptr  (0) 2022.02.24
[C++] override 지정자  (0) 2022.02.22