비트
라고 한다.1비트는 전구가 [꺼짐], [켜짐]으로 표현이 가능하다
2비트는 전구가 [꺼짐,꺼짐], [켜짐,꺼짐], [꺼짐,켜짐], [켜짐, 켜짐]으로 4개를 표현이 가능하다.
3비트를 해보면 8개가 표현이 가능하다
규칙성이 보인다. 2ⁿ으로 정보를 표현하고 있다.
바이트는 8개의 비트로 묶인 단위 즉, 8비트 = 1바이트이다.
그러면 몇개의 정보를 나타낼수있을까? -> 2⁸ = 256개이다. 그리고 더 큰단위로 나열할수있다.
바이트(1byte) | 8비트(8bit) |
1킬로바이트1(kB) | 1,000바이트(1,000byte) |
1메가바이트(1MB) | 1,000킬로바이트(1,000kB) |
1기가바이트(1GB) | 1,000메가바이트(1,000MB) |
1테라바이트(1TB) | 1,000기가바이트(1,000GB) |
* 워드
워드 : CPU가 한 번에 처리할 수 있는 데이터 크기를 의미함. 만약 CPU가 한 번에 16비트를 처리할 수 있다면 1워드는 16비트가 되고, 한 번에 32비트를 처리할 수있다면 1워드는 32비트가 되는것이다.
워드의 절반의 크기를 : 하프 워드(half word)
1배 크기를 : 풀워드 (full word)
2배의 크기를 : (double word)
현대 컴퓨터의 워드 크기는 대부분 32비트와 64비트이다.
프로그램 설치시 선택하는 설치파일을 선택할때 32비트파일과 64비트 파일이 바로 워드를 말하는것이다.
0과1만으로 모든 숫자를 표현하는 방법을 이진법이라고 한다.
십진수 | 이진수 |
---|---|
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
ㅁ 이진수 8을 표기한다면
쉽게 표현하자면 모든 수를 뒤집는다(1011 -> 0100)
그리고 1을 더한 값이 2의 보수이다.(0100+1 = 0101)
그렇다면 1011⑵이 음수인지 아니면 십진수5를 표현한건지 구분을 어떻게 하느냐라는 질문이 생긴다.
그건 나중에 플래그(부가정보)를 사용하기 때문에 컴퓨터가 음수인지 양수인지 알게된다.
데이터를 표현할 때 이진법 이외에 십육진법도 자주 사용한다.
십육진법은 수가 15를 넘어가는 시점에 자리 올림을 하는 숫자 표현 방식이다.
십육진수도 이진수와 같이 표현할때 15(16)
또는 ox15
사용 후자가 코드상 표기 방식이다.
십진수 | 십육진수 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
6 | 6 |
7 | 7 |
8 | 8 |
9 | 9 |
10 | A |
11 | B |
12 | C |
13 | D |
14 | E |
15 | F |
16 | 10 |
17 | 11 |
... | ... |
26 | 1A |
십육진수는 한 글자당 열여섯 종류(0~9)(A~F)의 숫자를 표현할 수 있다. 그렇다면 십육진수 한 숫자를 2진수로 표현하려면 비트가 4개 필요하다 2^4 = 16이니까
반대로 할 때는 당연히 반대로 숫자 4개씩 끊고, 끊어 준 네 개의 숫자를 하나의 십육진수로 변환한 뒤 그대로 이어 붙이면 된다.
코드에 16진수를 직접 넣는 사례
16진수는 프로그래밍할 때 이진수와 더불어 자주 사용되므로 기억해 두는 것이 좋다. 하드웨어와 밀접하게 맞닿아 있는 개발 분야에서는 아래와 같이 코드에 십육진수를 직접 쓰는 경우도 더러 있다.
offset = __mem_to_opcode_arm(*(u32 *)loc); offset = (offset & 0x00ffffff) << 2; if(offset & 0x02000000) offset -= 0x04000000; sffset += sym->stvalue - loc;
위의 코드를 알 필요는 없고 16진수를 직접 써 넣는 경우가 있다는 사실을 인지시키기 위해 작성했다.