비트는 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 |