0. 시작하기 앞서
자료형을 처음 공부한다면 앞선 포스팅을 먼저보고 오길 추천한다.
https://eigenarea.tistory.com/6#2.-%EC%9E%90%EB%A3%8C%ED%98%95
[C언어] 2. 변수와 자료형 기초(2)
1. 입력함수 scanf() scanf()는 앞서 소개했듯이, 표준입출력에서 입력을 담당하고 있다. https://eigenarea.tistory.com/4#-2.-%ED%91%9C%EC%A4%80-%EC%9E%85%EC%B6%9C%EB%A0%A5 그렇다면 프로그램 내에서 입력을 하고싶다
eigenarea.tistory.com
완벽한 구성은 아니더라도 유의미한 기초를 쌓을 수 있을 것이다.
-sizeof() 함수
자료형의 크기(바이트 단위)를 알아볼 수 있는 함수이다.
int i=100;
printf("%d", sizeof(i));
>>>4
1. 정수
가장 기본이 되는 변수는 int이며, CPU에 따라서 크기가 달라지지만 기본적으로 4바이트의 크기를 가진다.
->여러개의 정수형이 필요한 이유?
용도에 따라 변수의 크기를 선택할 수 있도록 함
-오버플로우와 언더플로우
오버플로우와 언더플로우는 변수가 나타낼 수 있는 범위를 벗어나는 숫자를 저장하려고 할 때 발생함
이때 범위 위로 벗어나면 오버플로우, 범위 아래로 벗어나면 언더플로우라 함.
ex) short i = -32769; ->언더플로우
short i=32768 -> 오버플로우
-오버플로우와 언더플로우의 규칙성
범위를 위로 벗어나면(오버플로우) 범위의 가장 아래부분에서 다시 시작하며,
범위를 아래로 벗어나면(언더플로우) 범위의 가장 윗부분에서 다시 시작한다.
(일종의 모듈러 연산이라고 생각하면 된다)
short i= 54234;
printf("%hd",i);
>>>-11302 //32767을 넘어서 남은 숫자만큼 -32768에서 다시 올라간 결과
-8진수 & 16진수의 표현
10진수 외에도 정수를 8진수나 16진수로 표기할 수 있다.
표기법은 이러하다.
8진수 : 0숫자
16진수 : 0x숫자
-8진수의 예
int n = 012; //012는 8진수
-16진수의 예
int n = 0xA; //0xA는 16진수
-8진수와 16진수의 형식지정자
10진수의 형식지정자: %d(그냥 정수이다..)
8진수의 형식지정자: %o
16진수의 형식지정자: %x (16진수의 알파벳을 소문자로 출력), %X (16진수의 알파벳을 대문자로 출력)
int x = 10;
int y = 010; //8진수
int z = 0x10; //16진수
printf("x = %d\n",x); //10진수를 10진수로 출력
printf("y = %d\n",y); //8진수를 10진수로 출력
printf("z = %d\n",z); //16진수를 10진수로 출력
>>>
x = 10
y = 8
z = 16
int x = 10;
int y = 010; //8진수
int z = 0x10; //16진수
printf("x = %d\n",x); //10진수를 10진수로 출력
printf("y = %o\n",y); //8진수를 8진수로 출력
printf("z = %x\n",z); //16진수를 16진수로 출력
>>>
x = 10
y = 10
z = 10
2. 상수
-변수 vs 상수
변수$_變$ : 저장된 값의 변경이 가능함
-> 프로그램이 실행되는 동안 값이 변함
상수$_常$ : 저장된 값의 변경이 불가능함
->프로그램이 실행되는 동안 값이 변하지 않음
-기호 상수
우리가 평소에 사용하는 숫자(정수, 실수형)들은 literal한, 즉 말그대로 상수이다.
예를 들어, 3.14, 10, 4012, 2^12와 같은 숫자가 변수가 아닌 상수임에 의문을 품는 사람은 없을 것이다.
이러한 숫자들을 리터럴(literal) 상수라고 부른다.
그러나, 우리가 배울 기호상수는 처음부터 숫자가 아니다.
바로 기호상수는 상수에 이름을 붙인 것이다.
예를 들어 우리가 3.141592...라는 숫자에 파이라는 이름을 붙이거나 2.71728.. 과 같은 숫자에 자연상수라는 이름을 붙이는 것과 같다.
-기호상수를 선언하는 방법
①#define 상수명 상수값
전처리문에서 상수를 정의하는 것이다.
만약 3.14를 PI라는 이름으로 정의하고 싶으면
#include <stdio.h>
#define PI 3.14
void main(void){
...
}
위와 같이 전처리문에서 정의해주면 된다.
②const (상수의 자료형) 상수명 = 상수값
#include <stdio.h>
void main(void){
const float PI = 3.14;
}
const를 사용하는 경우에는 구체적인 자료형을 지정할 수 있다.
추가적으로, 보통 상수명을 정할 때는 대문자를 주로 사용한다.(필수는 아님)
-상수의 자료형
정수 상수 : 정수형의 상수
정수 상수는 기본적으로 int형 취급이다.
ex) printf("%d",sizeof(100));
>>>4
실수 상수 : 실수형의 상수
실수 상수는 기본적으로 double형 취급이다.
ex) printf("%d",sizeof(3.14));
>>>8
-리터럴 상수의 자료형을 명시하고 싶은 경우
ex) 123이라는 상수 자체는 int로 기본 설정이지만, unsigned나 long과 같은 형태로 바꿀 수 있다.
접미사 | 자료형 | 예 |
u 혹은 U | unsigned int | 123u 혹은 123U |
l 혹은 L | long int 혹은 double | 123l 혹은 123L 혹은 0.56l |
ul 혹은 UL | unsigned long int | 123ul 혹은 123UL |
f 혹은 F | float | 0.56f 혹은 0.56F |
ll 혹은 LL | long long int | 123ll 혹은 123LL |
ull 혹은 ULL | unsigned long long int | 123ull 혹은 123ULL |
3.14f-> double형태의 3.14를 float형태로 바꿈
23u-> int의 23을 unsigned의 int로 바꿈
printf("%d",sizeof(123.56f));
>>>4
리터럴 상수의 자료형 변경에 대하여 알아보았다.
rewind하자면 기호상수의 자료형을 바꾸고 싶다면 const (자료형) ~을 통해 원하는 자료형을 선언하면 된다.
3. 문자형
-문자와 아스키코드
문자는 한글이나 영어에서의 한 글자, 숫자, 기호 등을 의미함
컴퓨터는 문자를 숫자(코드값)로 표현함 -> 아스키코드 이용
(signed) char형식의 자료형은 1바이트이기 때문에 (부호 1비트제외) 7비트를 사용하여 문자, 숫자 등을 표현함
$2^7$ = 128가지 경우의 수
자세한 아스키코드에 대응하는 문자는 아래 링크를 참조하도록 하자.
https://ko.wikipedia.org/wiki/ASCII
ASCII - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문
ko.wikipedia.org
(그래도 A가 65, a가 97에 대응된다는 것은 알아놓으면 좋다. 이것만 알면 알파벳의 아스키코드를 모두 알 수 있기 때문)
-문자 변수
문자는 char형 변수이다.
컴퓨터는 숫자형 정보밖에 받지 못하기 때문에 문자를 입력받으면 아스키코드 값으로 저장된다.
컴파일러는 ' '(작은 따옴표)를 만나면 문자임을 인지하여 아스키코드로 변환한다.
char c1;
c1 = 'A'; //c1내부에서 문자 자료형(char)의 65로 저장
printf("%c %d",c1,c1);
>>>A 65 // 형식지정자로써 문자형을 쓰면 문자가 출력되며 정수형을 쓰면 숫자가 반환됨을 알 수 있다.
'CS > C언어' 카테고리의 다른 글
[C언어] 4. 연산자(1) - 산술, 대입, 복합대입, 증감, 관계/논리, 조건 (0) | 2024.06.04 |
---|---|
[C언어] 3. 자료형(2) - 실수, 형 변환 (0) | 2024.06.04 |
[C언어] 2. 변수와 자료형 기초(2) (0) | 2024.06.03 |
[C언어] 2. 변수와 자료형 기초(1) (0) | 2024.06.03 |
[C언어] 1. C언어의 기본 개념(2) (1) | 2024.06.03 |