본문 바로가기

컴퓨터 언어/C언어

홍정모 C언어_문자형

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