2013. 4. 3. 16:34ㆍ프로그래밍/C언어 TIP
◎ 보수(Complement) 보수를 알기에 앞서 보수방식의 발전을 가져온 것이 바로 signed-magnitude(부호 절대값)방식이다. 부호 절대값 방식은 가장 쉽게 생각할 수 있는 방식이다. MSB(최상위비트)을 부호비트(0이면 양수, 1이면 음수)로 사용하고, 나머지는 절대값을 표현한다. 8비트 정수를 예로 들면,
위와 같이 표현할 수 있다. 하지만 문제점이 있다. 우선 0이 (+0과 -0)두 개 존재한다. 그리고 더욱 큰 문제는 덧셈과 뺄셈을 할 때 이다. +4 +(-4)의 경우 0000 0100 + 1000 0100 이 된다. 계산해보면 1000 1000이 나오는데 결과는 0이 아니라 -8이 된다. 매그니큐드 방식은 컴퓨터에서 부호로는 표현이 되지만 산술이 어렵다는 이유로 컴퓨터는 다른 방식을 사용한다. 그것이 바로 보수방식. ․ 1의 보수 1의 보수 방식은 부호 절대값 방식에서 단순히 음수의 순서를 뒤집은 것이다. 비트를 반전시키면 부호가 바뀌게 된다. 다행히 비트반전은 쉽게 구현할 수 있다. 그리고 MSB가 0이면 양수, 1이면 음수라는 성질은 그대로 유지된다.
하지만 여전히 0이 두 개인 것과 캐리를 처리해야 하는 문제가 남아있다. ․ 2의 보수 부호 절대값 방식의 문제였던 -0 문제와 캐리를 처리해야 하는 문제가 사라진다. 2의 보수 방식에서는 부호를 바꾸려면 비트를 반전한 다음 LSB에 1을 더하면 된다. 수직선의 원리를 도입한다. 8비트의 정수를 예로 들면, 0 ~ 127까지를 양수(+)로 보고 128 ~ 255까지를 음수(-)로 생각한다. -128에서부터 +127까지 표현이 가능하게 된다. 여기서 255를 2진수로 1111 1111이 된다. 하지만 -1로 읽는다. 그 이유는 2진수 0000 0001를 1의 보수로 취하면 1111 1110이 되고 거기에 최하위 비트에 1을 더하면 1111 1111이 되는 것이다. 정수로 표현하면 255가 되지만 보수방식에 따라 -1이 되는 것이다. 예를 들어, +1 + (-2)를 계산해 보면 0000 0001 + 1111 1110이 된다. 1111 1110은 10진수 2를 2의 보수로 취한 것이다. 결과를 보면 1111 1111이 되고 10진수로 -1이 되는 것이다. 컴퓨터는 내부적으로 보수회로가 존재하고 보수방식은 매그니큐드 방식과 마찬가지로 첫 번째 자리 비트로 부호를 알 수 있다.
◎ char 함수와 대입연산자(=) char함수는 메모리에 1byte를 할당해주도록 하는 C언어 명령어이다. char = cNum; 이라고 적어주면 cpu는 메모리에 cNum이라는 이름의 1byte 공간을 만든다. 아래 줄에 cNum = 100; 이라고 적어주면 cpu는 다시 cNum에 100을 저장하게 된다. printf("%d\n",cNum); 을 적으면 printf문으로 cNum을 호출하면 cpu가 연결된 모니터로 메모리에 cNum에 저장된 100을 출력하게 되는 것이다. 가장 중요한 건 char는 1byte의 메모리를 할당하기 위해 사용한다는 것이다.
대입연산자(=)는 위의 cNum = 100; 을 봤을 때, 수학의 기호처럼 같다의 의미가 아니라 오른쪽에 있는 100의 값을 cNum에 대입하라는 명령어로 사용됐다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
◎ 오늘의 실습 예제 char함수와 대입연산자를 이용하여 화면에 숫자를 출력하기 #include <stdio.h>
int main() { char cNum; cNum = 100; printf("%d\n",cNum); cNum = cNum+1; printf("%d\n",cNum);
return 0; } 결과화면 |
'프로그래밍 > C언어 TIP' 카테고리의 다른 글
201303/연산자. 형변환(type casting). (0) | 2013.04.03 |
---|---|
201303/문자형. 문자열. (0) | 2013.04.03 |
201303/실수형. 형식지정자 %u. (0) | 2013.04.03 |
201303/정수형. scanf()함수. sizeof()연산자. (0) | 2013.04.03 |
201303/자료형 (0) | 2013.04.03 |