변수는 저장된 값이 변경될 수 있지만 상수는 값이 변경되지 않는다.
정수형,부동소수점형(컴퓨터에서는 실수를 부동소수점으로 저장하기에 실수형을 부동소수점형이라고 부른다),문자형
정수형 = short, int, long, long long
부동소수점형 = float, double, long double
문자열 = char
자료형의 크기를 알기위해서는
sizeof()
연산자를 사용하면 된다
이는 변수나 자료형의 크기를 바이트 단위로 반환하는 연산자이다.
short(16비트)(2바이트) <= int(32비트)(4바이트)long<=(32비트)(4바이트)<=long long(64비트)(8바이트)
unsigned 키워드는 정수형 또는 char형 앞에 올수 있다.
unsigned는 음수가 아닌 값만을 나타낸다는 것을 의미한다.
unsigned 키워드를 붙이면 부호를 나타내는 비트가 필요 없어서 표현할 수 있는 양수 범위가 2배가 된다.
printf() 를 이용하여 unsigned 형 변수를 출력할 경우에는 형식 지정자로 %u를 사용하여야 한다.
unsigned int sales = 2800000000 printf("%u \n",sales);
변수가 저장할 수 있는 범위를 넘어서는 수를 저장했을 경우에 발생한다.
오버플로우 되면 다시 처음으로 돌아가서 계산을 하게된다.
0 > 1 > 65534 > 65535 > 0
정수상수는 기본적으로 int 형으로 간주되지만, int형의 범위를 넘는 정수 상수는 컴파일러가 long형으로 취급하고, 더 큰 수라면 unsigned long형으로 변경될 수 있다.(상수처리할때 가장 낮은 자료형을 선택한다.)
unsigned int / 123u or 123U long / 123l or 123L unsigned long / 123ul or 123UL
기호상수: 상수를 기호로 표현한 것
won = 1120 * dollar; // 실제의 값을 사용 won = ENCHANGE_RATE * dollar; // 기호상수 사용
#define ENCHANGE_RATE 1120 #define / 기호상수 / 값 전처리기 끝에는 세미콜론을 붙이지 않는다
const int ENCHANGE_RATE = 1120; const int / 기호상수 / 값 const 를 변수 선언 앞에 붙이면 상수가 된다.
10진수를 2진수로 변환하는 방법
1. 주어진 수를 2로 나누어서 몫과 나머지를 기록한다.
2. 몫이 0이 아니면 1의 과정을 되풀이 한다.
3. 몫이 0이면 마지막 단계의 몫과 나머지들을 역순으로 기록하면 된다.
부동소수점은 실수를 가수와 지수로 나누어서 표현한다.
ex) 1.49598 * 10^8
(가수부분) + (지수부분)
이렇게 가수와 지수를 따로 표현하게 되면 표현할수 있는 실수의 범위가 늘어난다.
float 32비트
double 64비트
실수 출력시 기본적으로 소수점 6자리 까지만 출력된다.(7자리에서 반올림된다)
반올림해서 마지막에 7출력
printf("%f",0.123456789); // 0.12345"7"지수표기법으로 출력하려면 %e나 %E를 사용한다 대소문자는 상관없지만 출력할때 입력한 대소문자에 따라 똑같이 나온다.
%g를 입력하면 소수점 이하 6자리안에서 표현이 가능하면 %f를 사용하고, 그렇지 않으면 %e를 사용하게 된다.printf("%e",0.123456789); //1.234568e-001 출력
기본적으로 소수점을 이용하여 표현한다. 기본적으로 double형으로 저장된다. 4바이트크기 float형 상수를 만들려면 f나 F를 붙여주면된다.
3.141592 // double형 상수 64비트 3.141592F // float형 상수 32비트
부동소수점 상수는 지수 표기법으로도 표현이 가능하다
123.45 >>> 1.2345e2 12345.0 >>> 1.2345e4
언더플로우: 부동소수점 수가 너무 작아서 표현하기 힘든 상황
ex)float a = 1.23456e-46;
정수 산술 연산과는 달리 부동 소수점 연산은 정확하지 않는 경우가 많다. 따라서 오차를 줄이려면 float 보다는 double 을 써야한다.
\0 널문자
\a 경고
\b 백스페이스
\t 수평탭
\n 줄바꿈
\v 수직텝
\f 폼피드 다음페이지로 넘김
\r 캐리지 리턴 커서를 현재 라인의 시작위치로 옮긴다
\"
\'
\\
char beep = '\a';
printf("%c",beep);
char형은 8비트의 정수를 저장하는 자료형이다. 따라서 문자와 작은 정수값도 저장가능하다.
char 문자및 정수 1바이트 -128~ 127
unsigned char 문자 및 부호없는 정수 0~255
- 1st_number
char<unsigned char<short<int<long<float<double
3.byte
0a2,10,000
3exp8
"a"문자열임, '/z' 문자상수는 오직 하나의 문자만 있어야한다. ('\010' - 올바른 문자 상수로 이것은 8진수 이스케이프 시퀀스로서, ASCII 코드에서 백스페이스 문자다.)
010
int
double
float
int
char
a) 올바르다
b) # 사용불가
c) 숫자로 시작불가능
d) % 사용불가
a) 3.141592e+00
b) 7.165320e+02
p161
일반적으로 정수 계산보다 빠르다.
정수 연산과는 달리 오버플로우는 발생하지 않는다.
float는 48비트로 실수를 표현한다.
int x =10, short y =6;
unsigned short double x;
printf("%e",1.3e20);
printf("%x",0xfe);
printf("%c",'\t');
printf("%f",10.0f);
double형이라 float형에 대입하면 경고메세지가 발생한다. 1.234f라고 수정해줘야한다.
char grade = 'a'; double rate = 1e10; double profit = 75.0;