예를 들어 12를 2진수로 표현하면 1100,
BCD로 표현하면 0001 0010 이다
-> 즉, 각각 12의 1과 2를 따로따로 표현한것이다
-> 2진수를 효율적으로 활용하지못한다
-> BCD를 사용할때 기존 2진수에 비해 같은 수를 표현할 때 더 많은 비트를 사용
-> 과거에 비해 비트가 저렴해졌지만 BCD로 표현할때 버린만큼 저렴해지진않음
-> 2진수를 조작하다보면 되게 난잡하게되어있다, 사람들은 이 2진수를 더 읽기 쉽게 표현하기위한 방법을 알아냈다, 그 중 몇개를 살펴보자
-> 8진이라는것은 밑이 8이라는 의미
-> 8진 표현법은 2진수 비트들을 3개씩 그룹으로 묶는 아이디어
예를 들어서 100101110001010100과 같은 2진수가 있다
이를 8진 표현법, 즉 3개씩 나누어보자
100 101 110 001 010 100
4 5 6 1 2 4
-> 위처럼 2진수의 비트들을 3개씩 그룹으로 묶고 각 그룹에 8진 수를 보여해 456124를 얻음
-> 즉 100이라는 2진수를 8진수로 바꾸면 1*22승 + 0*21승 + 0*20승 = 4 이런식으로 계산
-> 8진 표현법이 아직 쓰이긴하지만 과거처럼 널리 쓰이진않음, 대신 이 16진 표현법을 사용한다(이 또한 16진이니 밑이 16이라는 의미이다)
-> 요즘은 컴퓨터 내부가 8비트의 배수를 사용해 만들어지기때문
-> 8의 배수는 4(16진수 한 자리의 비트 수)로는 균일하게 나눠지지만 3(8진수 한 자리의 비트 수)로는 균일하게 나눠지지 않기 때문이다
-> 앞서 2진수를 표현하기위해 10진수(0, 1)이 필요하고 8진수도 10개의 숫자 중 8개만 필요하다, 하지만 16진수는 10개의 10진수로는 충분치않다,
그렇기에 우린 10에서 15까지에 이르기까지 6개의 숫자가 더 필요한데 이를 abcdef로 표현하기로했다
16진수 예시...
예를 들어 11010011111111000001 이라는 2진수가 있다
16진수로 변환하면...?
1101 0011 1111 1100 0001
d 3 f c 1
수를 변환하는 방법을 어떻게 알 수 있을까 ??
-> 예를 들어서 10이라는 숫자가 2진수면 2, 8진수면 8, 10진수면 10, 16진수면 16인것처럼 어떤 진법을 사용했냐에 따라서 달라진다
-> 보통 책에선 10 오른편 아래에 작게 몇진법을 사용했다고 첨자를 사용한다
-> 하지만 키보드로는 이 첨자를 입력하기 불편하기에 일관성있는 표기법을 사용할 수 있으면 좋을것이다
-> 0으로 시작하는 숫자는 8진수 (예시 017(8진수) -> 15(10진수))
-> 1~9로 시작하는 숫자는 10진수
-> 0x가 앞에 붙은 숫자는 16진수 (예시 0x12f(16진수) -> 303(10진수))
-> 2진수는 사용할 일이 크게 없기에 따로 표현을 제공하는 프로그래밍언어가 없다
c++같은 몇몇언어는 0b라는 접두사를 사용하여 2진수를 표현
1. 컴퓨터는 제대로 조직화되지않은 비트들로 이루어지지않는다
2. 컴퓨터를 설계하는 사람은 비용을 고려해 컴퓨터가 사용할 비트의 개수, 조직을 결정
3. 비트는 매우 작아서 기본 단위로 사용하기엔 유용성이 떨어짐
1. 니블 - 비트 4개
2. 바이트 - 비트 8개
3. 하프 워드 - 비트 16개
4. 롱 워드 - 비트 32개
5. 더블 워드 - 비트 64개
-> 이 중에 바이트를 가장 많이 쓰임
-> 각 컴퓨터가 설계상 자연스럽게 사용할 수 있는 비트 묶음의 크기
-> 여기서 자연스럽다는것은 컴퓨터가 빠르게 처리할 수 있는 가장 큰 덩어리를 의미