본문 바로가기

프로그래밍 언어/C언어

C언어 - 숫자 표현 범위

 

 

아래의 코드를 살펴보자.

 

#include <stdio.h>

int main() {
	int s = 0;
	int i;

	for (i = 1; i <= 10; i++) {
		s += i;
	}
	printf("%d", s);
}

 

#include <stdio.h>

int main() {
	char s = 0;
	int i;

	for (i = 1; i <= 10; i++) {
		s += i;
	}
	printf("%d", s);
}

 

두 코드의 차이점은 s가 int, char

 

즉 타입이 다르다는 것이다.

 

 

그렇다 해도 int와 char은 메모리에 정수 숫자를 저장할 수 있어서 실행결과도 같다.

 

 

하지만 5050을 출력한다면 어떻게될까?

#include <stdio.h>

int main() {
	int s = 0;
	int i;

	for (i = 1; i <= 100; i++) {
		s += i;
	}
	printf("%d", s);
}

 5050이 출력됨.

#include <stdio.h>

int main() {
	char s = 0;
	int i;

	for (i = 1; i <= 100; i++) {
		s += i;
	}
	printf("%d", s);
}

-70이 출력됨

 

 

5050을 출력하는 코드를 작성하였지만 char 타입인 s의 코드는 -70을 출력하였다.

 

 

 

답부터 설명하자면,

 

 

char은 -128부터 +127까지 표현이 가능하기에 5050은 표현이 불가능하다.

 

 

 

 

255가지의 정수 숫자를 표현할 수 있기에

 

-128부터 +127까지 표현이 가능하다는 말이다.

 

 

 

그러면 char 타입으로 128을 출력하면 어떻게 될까?!

#include <stdio.h>

int main() {
	char s = 128;

	printf("%d", s);
}

 

-128이 출력되는 것을 확인할 수 있다.

 

 

 

왜일까?!

 

 

예를 들어 3비트의 타입이 있다고 가정해보자.

 

 

 

 

이 부분에서 반을 나누어 4567 부분을 택한다.

 

 

하지만 우리는 4567을 음수로 처리하는 것이 아닌

 

0123 순서로 음수를 처리해야한다.

 

 

그래서 이와 같이 나타낼 수 있다.

 

 

하지만 아직 끝난 것이 아니다.

 

아주 예전에 다루었던 1의 보수, 2의 보수 과정을 거쳐야 한다.

 

 

이와 같은 과정을 거쳐서 01234567 을

 

-4, -3, -2, -1, 0, 1, 2, 3

 

으로 표현할 수 있다.

 

 

결론적으로 하고자 하는 말은

1의 보수와 2의 보수를 취해서 값을 얻을 수 있다.

 

 

 

 

그리고..

 

양수만 표현하게 하려면 (절대값 형태)

타입 앞에 unsigned 를 붙여준다.

 

 

char 형태는 255 개의 숫자 (-128 ~ +127) 가능하니

 

unsigned char 형태는 0 ~ 255 까지 표현이 가능하다.

 

#include <stdio.h>

int main() {
	unsigned char s = 127;

	s += 1;
	printf("%d", s);
}

128 출력됨.

 

 

----------참고----------

<limit.h> 헤더코드를 이용해

 

아래의 값도 알아볼 수 있다!

#include <stdio.h>
#include <limits.h>

int main() {
	int i = INT_MAX;
	int j = INT_MAX + 1;
	unsigned int k = UINT_MAX;

	printf("%d\n", i);
	printf("%d\n", j);
	printf("%d\n", k);
}

 

 

 

 

 

https://book.naver.com/bookdb/book_detail.nhn?bid=8187381

'프로그래밍 언어 > C언어' 카테고리의 다른 글

C언어 - static  (0) 2021.02.15
C언어 - 전역변수, 지역변수  (0) 2021.02.06
C언어 - 배열 문법  (0) 2021.01.25
C언어 - 배열과 함수  (0) 2021.01.24
C언어 - 배열의 시작  (0) 2021.01.20