프로그래밍/Python

[Python] 비트 연산자의 이해 (1) 비트와 바이트, 16진수

베린이 2023. 11. 13. 11:56
반응형

지난 글 끝부분에 비트연산자의 종류만 언급하고 마무리했는데요, 좀 길어질 것 같아서 몇 차례에 나누어 설명해 볼까 합니다.

2023.11.10 - [프로그래밍/Python] - [Python] 연산자의 종류와 사용 예시

 

[Python] 연산자의 종류와 사용 예시

- 산술 연산자의 종류 = 대입 a = 10 + 더하기 a = 5 + 3 (8) - 빼기 a = 5 - 3 (2) * 곱하기 a = 5 * 3 (15) / 나누기 a = 5 / 3 (1.666666) // 몫 a = 5 // 3 (1) % 나머지 값 a = 5 % 3 (2) ** 제곱 a = 5 ** 3 (125) 일반적인 사칙연

veriln-e.tistory.com

 

- 비트와 바이트

비트(Bit)는 컴퓨터에서 쓰이는 제일 작은 단위로 0과 1만 나타낼 수 있습니다. 우리가 일반적으로 사용하는 십진수로 치면 0에서 9까지 표현할 수 있는 '한 자리'라고 보시면 되겠습니다.

  • 2 bit: 00, 01, 10, 11 4가지 표현 가능
  • 3 bit: 000, 001, 010, 011, 100, 101, 110, 111 8가지 표현 가능

이런 식으로 n-bit는 2n가지의 수를 표현할 수 있습니다.

 

8-bit를 1 byte라고 표현합니다. 그러면 왜 하필 8-bit가 byte가 된 걸까요?? 그건 ASCII코드가 8자리의 bit로 표현되기 때문입니다.

컴퓨터는 일반적인 문자를 인식할 수 없어서 ASCII(American Standard Code for Information Interchange)라는 인코딩 룰을 만들었습니다.

 

ASCII table < 출처: velog.io/@exploit017 >

 

이진법 표현식을 보면 다 8자리로 되어있죠?? 그래서 8-bit를 byte로 묶어 표현하는 겁니다.

 

- 16진수

ASCII table을 보면 16진수라고 표시된 부분이 있습니다. 16진수를 Hexadecimal, 또는 Hex라고 하는데 컴퓨터 관련 분야에서 저~~~엉말 많이 사용하는 방식입니다. 왜 16진수를 사용할까요?? 그건 2진수의 가독성을 높이기 위함입니다.

문자 LOVE를 ASCII로 변환해볼까요?? 

01001100(L)

01001111(O)

01010110(V)

01000101(E)

이 32-bit(4-byte)의 수를 한줄로 쓰면

01001100 01001111 01010110 01000101이 됩니다. 전혀 못 알아보겠죠?? 16(24)진수는 4 bit씩 끊어서 읽을 수 있게 해 줍니다. 그리고 2진법을 16진법으로 바꾸면 돼요!

L: 0100 1100 = 4C (16진법)

O: 0100 1111 = 4F

V: 0101 0110 = 56

E: 0100 0101 = 45

그리고 16진법으로 표현할 때는 숫자 앞에 0x를 붙여 이 수가 16진수임을 나타내면 됩니다.

정리하자면 16진법은 2진법의 가독성을 높이기 위한 방법이며 그 예시로 LOVE를 표현하면

01001100 01001111 01010110 01000101(2) = 0x4C4F5645가 되는 겁니다.