데이터 표현 방식
숫자 = 기호
0~1 (0, 1) : 2 진수
0~9 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) : 10 진수
0~F (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F) : 16 진수
ㆍ 2 진수
2 진수의 경우 0과 1의 숫자로 구성되며, 왼쪽 부터 2^0으로 시작함
ㆍ 비트와 바이트
비트 (Bit) : 데이터의 최소 단위. 2 진수 값(0과 1)중 하나를 저장할 수 있는 메모리 크기 (1/8 Byte)
바이트 (Byte) : 8개의 비트 묶음. 2 진수 값 8개를 저장할 수 있는 메모리 크기 (8 Bit)
ㆍ C언어에서 진수 표현
10 진수 = 특별한 선언이 없다. ex) 10은 그냥 10, 3은 그냥 3
16 진수 = 0x (영 엑스)로 시작 ex) 9는 0x9
8 진수 = 0 (영)으로 시작 ex) 7은 07
ㆍ 정수의 표현 방식
부호 비트 (MSB, Most Significant Bit) : 0은 양수, 1은 음수
ex) 00000101 => +5
ⓐ 음의 정수 표현 : 2의 보수법 (1단계 : 1의 보수 (NOT연산 : 1 -> 0, 0 -> 1), 2단계 : 1을 더함)
0 0 0 0 0 1 0 1
-> +5에 1의 보수를 취해주자. (NOT 연산)
1 1 1 1 1 0 1 0
=> 1을 더하자.
1 1 1 1 1 0 1 1
=> -5
ⓑ 음의 정수를 양의 정수로 표현
1 1 1 1 1 0 1 1
=> -5에 1의 보수를 취해주자. (NOT 연산)
0 0 0 0 0 1 0 0
=> 1을 더하자.
0 0 0 0 0 1 0 1
=> +5
ⓒ 같은 정수. 양의 정수와 음의 정수의 덧셈
+5 +(-5) = 0
0 0 0 0 0 1 0 1 => +5
1 1 1 1 1 0 1 1 => -5
답 : 1 0 0 0 0 0 0 0 0 (1은 올림수로 버려진다. 결과는 '0')
ㆍ 실수의 표현 방식
실수의 표현 방식 => 부동 소수점 오차 But, 넓은 범위의 실수 표현 가능
ㆍ 비트 연산자
& : 비트 단위로 AND 연산 (결합 방향 →) ex) 0&0=0, 0&1=0, 1&0=0, 1&1=1
| : 비트 단위로 OR 연산 (결합 방향 →) ex) 0|0=0, 0|1=1, 1|0=1, 1|1=1
^ : 비트 단위로 XOR 연산 (결합 방향 →) ex) 0^0=0, 0^1=1, 1^0=1, 1^1=0
~ : 단항 연산자이면서 비트 단위로 NOT 연산(보수 연산=비트 반전) (결합 방향 ←) ex) ~0=1, ~1=0
=> MSB(부호 비트)와 데이터 비트 모두 반전. 그리고 바이트 크기를 넘어서는 비트는 버려짐
<< : 피연산자의 비트열을 왼쪽으로 이동 (정수의 값은 두 배씩 증가) (결합 방향 →) ex) 8<<2 //8의 비트열을 왼쪽으로 2만큼 이동
>> : 피연산자의 비트열을 오른쪽으로 이동 (정수의 값은 2로 나누어짐) (결합 방향 →) ex) 8>>2 //8의 비트열을 오른쪽으로 2만큼 이동
=> MSB가 오른편으로 밀려나면 CPU에 따라서 1 또는 0을 채운다.