//1바이트로 양수만 표현
//256가지의 표현 가지 수가 나오며, 0 ~ 255까지 가능
unsigned char c = 0;
c = 0;
c = 255;
//1바이트로 양수, 음수 둘 다 표현
//signed는 생략이 가능하다
//양수와 음수 둘 다 표현이 가능하기 때문에 범위는 256에서 절반씩 줄어든다고 생각하면 된다.
// -128 ~ 0 ~ 127
char c1 = 0;
c1 = 255;
● signed : 음수, 양수 둘 다 가능
● unsigned : 양수만 가능
0 |
양수
1 |
음수
이 부분을 MSB ( Most significant bit - 가장 중요한 비트, 음수/양수 판별하는 최상위 비트) 라고 한다.
그럼 컴퓨터에서 음수의 계산은 어떻게 할까?
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
위의 비트가 1을 의미한다면, -1은
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
이것일까?
아니다.
-1을 찾기 위해서는 1과 더했을 때 0 이 나오게 하는 것을 찾으면 된다.
즉, 뺄셈을 음수의 덧셈으로 생각해보면 된다.
5 + ( -5 ) = 0
7 + ( -7 ) = 0
이런식으로!
응용해보면,
1)
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
+
------------------------------------------------------------------
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
해석)
01111111과 더했을 때 0이 되도록 하는 것은 10000001이다.
따라서 01111111이 '127' 이니까 10000001은 '-127'을 의미하게 된다.
2)
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+
--------------------------------------------------------------------
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
해석)
00000001 과 더했을 때 0이 되도록 하는 것은 11111111이다.
따라서 00000001이 '1' 이니까 11111111은 '-1'을 의미하게 된다.
그럼 아래 코드를 보자.
unsigned char c = 0;
c = 0;
c = 255;
// -128 ~ 0 ~ 127
char c1 = 0;
c1 = 255;
c의 '255'를 넣으면 컴퓨터는 어떻게 받아들일까?
c는 양수만 표현이 가능하기 때문에 컴퓨터가 255로 받아들이는 반면, c1은 음수까지 값이 가능하므로 컴퓨터에서는 '-1'로 받아들인다.
c의 상태도 다음과 같은 비트 상태이고,
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
c1의 상태도 다음과 같은 비트 상태이다.
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
c에 채워져 있는 비트 상태와 c1에 채워져 있는 비트 상태가 같다.
즉 둘의 메모리 비트 값은 동일한 상태이다 (똑같은 상태)
하지만,
동일한 메모리 공간에 동일한 값이 채워져 있더라도 "컴퓨터가 어떻게 해석하느냐"에 따라 컴퓨터에 받아들여지는 값이 다를 수 있다
정리하면,
컴퓨터가 어떤 관점으로 보냐에 따라 해석이 달라질 수 있다는 것이다. (해석의 차이. 같은 대상에 대해서 해석이 다름.)
//1바이트로 양수만 표현
//256가지의 표현 가지 수가 나오며, 0 ~ 255까지 가능
unsigned char c = 0;
c = 0;
c = 255; //컴퓨터는 '255'로 받아들인다.
//1바이트로 양수, 음수 둘 다 표현
//signed는 생략이 가능하다
//양수와 음수 둘 다 표현이 가능하기 때문에 범위는 256에서 절반씩 줄어든다고 생각하면 된다,
// -128 ~ 0 ~ 127
char c1 = 0;
c1 = 255; //컴퓨터는 '-1'로 받아들인다.
음수를 빨리 찾는 방법 (2의 보수)
1) 양수 비트를 반전 시키고,
2) 1을 더한다.
예시)
2
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
2를 가지고 -2를 찾아보면
(1) 양수 비트 반전 -
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
(2) 1 더하기
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
이것이 ' -2 ' 이다.
크기
1byte = 8bit로 256가지의 경우를 표현할 수 있다.
2byte= 16bit로 6만..이상 가지의 경우를 표현할 수 있다.
...
4byte = 32bit로 42억 가짓 수의 경우를 표현할 수 있다.
-------------------------------------------------------------------------따라서 표현하고자 하는 대상에 대한 적절한 크기의 자료형을 선택하면 된다.