21/01/10
문자형
문자형도 정수형의 일부분
ASCII Chart
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(){
char c = 'A';
char d = 65; //d='A'
printf("%c %hhd\n", c, c);//문자로 출력 %c, 정수형 char로 출력 %hhd
printf("%c %hhd\n", d, d);
return 0;
}
/*A 65
A 65*/
char 정수형 %hhd = 문자형 %c
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(){
char a = '\a'; // \는 이스케이프 시퀀스로 문자보다는 행위를 표현하는 것
printf("%c", a);
printf("\07"); //8진수 7의미
printf("\x7"); //16진수 7의미
return 0;
}
/*ASCII CODE에서 BELL 값을 가짐. 실행하면 띠링~ 소리남*/
그외
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(){
float salary;
printf("$______\b\b\b\b\b\b");
scanf("%f", &salary); //입력커서 제일 앞에서 반짝이도록
printf("AB\tCDEF\n");
printf("ABC\tDEF\n");//tab. 줄맞춰줌
/*AB CDEF
ABC DEF*/
return 0;
}
부동소수점형
m x 10^n
m: significand, n:exponent
유효숫자 5개 1.2345 * 10^2
유효숫자 6개 1.23450 * 10^2
normalized significand: 1.□□□□ * 2^△
컴퓨터에서 실수를 부동소수점 자료형으로 저장할 때, normalized signmificand 형태로 바꿔서 저장한다.
sign=0: 양의 부호
exponent: unsigned 형태로 표현하고, 나중에 음양 지수 먹일때, 음이면 127을 빼주기 (-127~128값)
fraction: 앞에서부터 2^0, 2^-1, 2^-2....
부동소수점을 사용하면 범위가 매우 넓어지지만,유효숫자가 6개로 불확실성이 커지는 단점도 있음
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(){
int i = 3;
float f3 = 3.f; //3.0f
double d3 = 3.; //3.0
float f4 = 1.234e10f;
printf("%e\n", f4);//%e: 과학적 표기법으로 출력할 때 사용하는 형식지정자
float f5 = 0xb.aP1;
double d5 = 1.0625e0;
printf("%a", d5);//%a: 16진수로 출력할 때 사용하는 형식지정자
}
/*
1.234000e+10
0x1.1000000000000p+0*/
부동소수점형의 한계
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <float.h>
int main(){
//round-off errors (ex1)
float a, b;
a = 1.0E20f + 1.0f;
b = a - 1.0E20f;
printf("%f\n", b);
/*1.0이 출력되어야하는데, 0.000000 출력 오류
상대적으로 너무 큰 숫자와 작은 숫자를 더하면, 구조상 작은 숫자는 사라지는 효과.
0으로 생각되어짐 => 범위가 너무 다른 숫자끼리 연산하면 오류 발생할 수도 있음*/
//round-off errors (ex2)
float c = 0.0f;
c = c + 0.01f;//를 백번 더해주면.......
printf("%f\n", c);
/*0.01을 100번 더해주면 0.1이 출력되어야하는데, 0.999999 출력 오류
=>2진수로 변경될 때 생기는 오차가 누적되어 더해져서*/
//overflow
float max = 3.402823466e+38F;//float가 받을 수 있는 가장 큰 값. 위의 헤더파일에서 가져옴
printf("%f\n", max);
max = max * 100.0f;
printf("%f\n", max);
/*340282346638528859811704183484516925440.000000
inf 출력 => infinite 너무 커서 뭔지 모르겠다는 의미. 너무 큰 숫자를 다룰 때.
하나 위의 자료형인 double로 바꾸면 해결가능할 수도.*/
//underflow
float min = 1.401298464e-45F;
printf("%e\n", min);
min = min / 2.0f;//subnormal. 숫자가 사라져버리는 것
printf("%e\n", min);
/*0.000000e+00 출력
=>부동소수점으로 표현할 수 없을 정도로 작은 숫자*/
}
불리언형
#include <stdbool.h>
0/false
1/true
bool형 사이즈/ 1byte. 자료형이 가질 수 있는 가장 작은 단위
복소수형
#include <complex.h>
실수부+허수부 i
'컴퓨터 언어 > C언어' 카테고리의 다른 글
홍정모 C언어_printf(). scanf().오버플로우 (0) | 2021.01.07 |
---|