데이터의 표현단위
'비트'는 컴퓨터가 표현하는 데이터의 최소단위로 2진수 값 하나를 저장할 수 있는 메모리의 크기를 뜻하는 단위이다.
1비트 |
|
|
|
|
|
| 1바이트 |
|
|
|
|
|
|
| 2바이트 |
0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
0과 1을 표현하는 각각의 작은 사각형은 메모리의 최소 단위인 비트를 의미한다. 그리고 8개의 비트가 모여서 1바이가 됨을 보이고 있다.
데이터 표현 방식
10진수 |
2진수 |
8진수 | 16진수 |
1 |
1 |
1 | 1 |
2 |
10 |
2 | 2 |
3 |
11 |
3 | 3 |
4 |
100 |
4 | 4 |
5 |
101 |
5 | 5 |
6 |
110 |
6 | 6 |
7 |
111 |
7 | 7 |
8 |
1000 |
10 | 8 |
9 |
1001 |
11 | 9 |
10 | 1010 | 12 | A |
11 | 1011 | 13 | B |
12 | 1100 | 14 | C |
13 | 1101 | 15 | D |
14 | 1110 | 16 | E |
15 | 1111 | 17 | F |
C언어는 10진수 이외에 8진수와 16진수의 데이터 표현도 허용을 한다. 따라서 8진수, 16진수의 표현방식이 정해져있다.
int num1 = 10; // 특별한 선언이 없는 10진수의 표현
int num2 = 0xA // 0x로 시작하면 16진수로 인식
int num3 = 012 // 0으로 시작하면 8진수로 인식
-------------
표현방식
-정수
C언어에서 보통 하나의 정수를 4바이트로 표현합니다. 하지만 4바이트면 32비트로 너무 길어 1바이트로 설명하겠습니다.
- 정수의 가장 왼쪽에 존재하는 비트는 부호비트입니다.
+1이라는 값을 저장할때 다음과 같이 저장합니다.
↓부호(+,-)의 표현 |
|||||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
양수라면 0, 음수라면 1을 저장하여 부호를 표시합니다. 그래서 이를 가리켜 MSB(Most Significant Bit)라 칭합니다.
음의 경우 아래와 같이 1의 보수를 취한 후 1를 더해주어야하며, 이 과정을 2의 보수법이라 합니다.
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
[정수 +5] |
1의 보수를 취한다. |
||||||||
1 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
|
1를 더한다. |
||||||||
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
[정수 -5] |
-실수
부호 | e |
m |
|||||||||||||
1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
C에서의 실수 표현은 이와 같이 합니다. 하지만 넓은 범위의 실수를 표현할 수 있지만, 실수의 표현에 오차가 존재합니다. 예를 들어 0을 표현하고자해도 2의 n승은 절대로 0이 될 수 없기 때문이다. 이렇듯 컴퓨터는 우리가 표현하고자 하는 실수의 값을 정확하게 표현하는 것이 아니라, 아주 가까운, 문제가 없을 만큼의 근사치를 통해서 실수를 표현하게 됩니다. 따라서 실수를 표현하는데 있어서 오차가 존재하는 것은 당연한 일이며, 이런 오차를 부동 소수점 오차라 합니다.
-----------
비트 연산자
메모리 공간의 효율성을 높이고 연산의 수를 줄이는 요인이 되기도 한다.
연산자 |
기능 |
결합방향 |
& |
비트단위로 AND 연산을 한다. ex) num1 & num2 |
→ |
| |
비트단위로 OR 연산을 한다. ex) num1 | num2 |
→ |
^ |
비트단위로 XOR 연산을 한다. ex) num1 ^ num2; |
→ |
~ |
단항 연산자로서 피연산자의 모든 비트를 반전시킨다. |
← |
<< |
피연산자의 비트 열을 왼쪽으로 이동시킨다. ex) num<<2; // num은 변화 없음, 두 칸 왼쪽 이동 결과만 반환 |
→ |
>> |
피연산자의 비트 열을 오른쪽으로 이동시킨다. ex) num>>2; // num은 변화 없음, 두 칸 오른쪽 이동 결과만 반환 |
→ |
<< 연산자와 >> 연산자는 '비트 이동(shift) 연산자'라해서 비트 연산자와는 성향이 조금 다릅니다. 하지만 흔히 비트 연산자의 범주에 포함시켜서 이야기하기 때문에 함께 정리합니다.
'배울 것들 > 언어' 카테고리의 다른 글
C프로그래밍 6/? 반복문 (0) | 2018.11.19 |
---|---|
C프로그래밍 5/? 자료형 (0) | 2018.11.13 |
C프로그래밍 4/? 자료형 (0) | 2018.11.11 |
C프로그래밍 2/? (변수와 연산자) (0) | 2018.11.08 |
C프로그래밍 1/? (C언어 시작. 프로그래밍의 구성) (0) | 2018.11.08 |