long
정의
long, 길다는 뜻입니다. 차지하는 비트 수가 더 많습니다. 고로 저장할 수 있는 수의 범위가 늘어납니다. int, double, signed, unsigned와 함께 쓰일 수 있습니다. float이나 char과는 함께 쓰일 수 없습니다.
선언
long int Iamlongint; long Iamalsolongint; //long만 붙이면 자동으로 long int로 인식합니다. long double a; signed long b; unsigned long c;
크기
printf("int needs %lu bytes. long int needs %lu bytes.",sizeof(int),sizeof(long int)); printf("double needs %lu bytes. long double needs %lu bytes.",sizeof(double),sizeof(long double));
int와의 비교
int a=987654321987654321; printf("%d",a); // 오버플로우 int b=-987654321987654321; printf("%d",b); //언더플로우 long int c=987654321987654321; printf("%ld",c); //제대로 나옵니다. long int d=-987654321987654321; printf("%ld",d); //제대로 나옵니다.
오버플로우란 쉽게 말해 '넘친다'는 뜻입니다. 언더플로우는 바닥을 뚫고 내려가는 것이라고 생각하면 됩니다. 입력된 수가 너무 크거나 작으면 그 자료형에 할당된 비트로는 다 표시할 수가 없습니다. 그래서 이렇게 뜬금없는 값이 나옵니다. 자세한 정보는 구글링을 활용하세요.
활용
큰 수가 필요할 때 쓰겠죠? 여러분 통장 잔고에는 쓸 일이 없습니다.
long long
정의
long이 두 개니까 두 배로 길겠네요. 차지하는 비트 수가 long의 두 배입니다. int, signed, unsigned와 함께 쓰일 수 있습니다. float, double, char과는 함께 쓰일 수 없습니다.
선언
long long int A; long long years_ago; //long long만 쓰면 long long int로 인식됩니다. unsigned long long a; long long double b; //에러
크기
위에 있는 long의 크기 단락을 응용해보세요!
int와의 비교
역시 위에 있는 long의 비교 단락을 응용해보세요. 이번에는 좀 더 큰 값을 넣어야 합니다.
활용
더 큰 값에 씁니다.
short
정의
short, 짧다는 뜻입니다. 그럼 차지하는 비트 수가 더 적느냐, 꼭 그런 것은 아닙니다. 표준은 'short는 int보다 크면 안 된다'라고 규정하고 있습니다. 즉, 차지하는 비트 수가 int와 같을 수도 있다는 것이죠.
오로지 int에만 쓰일 수 있습니다.
선언
short int a; short shorttrack; //short int와 short는 같습니다.
크기
위에 있는 내용을 응용해보세요.
int와의 비교
위에 있는 내용을 응용해보세요. short형 변수를 표시할 때는 %hd 를 사용합니다.
활용
작은 값에 씁니다.