-목차-
1. 실수형
2. 문자 정보 표현과 문자 자료형
3. 이진 자료의 해석 예제
1. 실수형
- C에는 3개의 실수형이 존재 : float, double, long double
- 부동 소수점으로 표현(소수점 위치가 가변적으로 변하는 방식)함
Types | 크기 | 최소값 | 최대값 |
float | 32 bits | 7개의 유효 숫자를 가지며 -1.0E + 38의 근사값 |
7개의 유효 숫자를 가지며 1.0E + 38의 근사값 |
double | 64 bits | 15개의 유효 숫자를 가지며 -1.0E + 308의 근사값 |
15개의 유효 숫자를 가지며 -1.0E + 308의 근사값 |
long double |
64 bits | 15개의 유효 숫자를 가지며 -1.0E + 308의 근사값 |
15개의 유효 숫자를 가지며 -1.0E + 308의 근사값 |
- unsigned를 사용하지 않음
+) 모든 환경/platform에서 Floating Point를 사용할 수 있는 것은 아님
+) 부동 소수점 표현 : F * 2**E
- E값에 따라 소수점 위치가 바뀜. (소수점이 떠다님)
- 소수부 F, 지수부 E, 그리고 부호 S를 표현하는 방법이 필요
- 과학적 기수법을 모방함
ex) 부동 소수점 표현 예제
- 부호 값 1 : 음수를 의미
- 지수 값 01111110 : 126 (10진수)
- 소수부 값 0.10000000000000000000000 : 0.5 (10진수)
N = (-1)**1 * 1.5 * 2**(126-127) = -0.75 (10진수)
+) 부동 소수 표현과 비교 연산자
#include <stdio.h>
int main(void)
{
float x = 0.0;
int i = 0;
for (i = 0; i <= 9; i++){
x = x + 0.1;
}
if (x == 1.0){
printf("x is 1.0\n");
} else {
printf("x is not 1.0\n");
}
return 0;
}
- 위의 코드를 실행하면 어떤 것이 출력될까?
- x is 1.0 이 출력될 것 같지만 x is not 1.0이 출력된다.
- 왜냐하면 부동 소수점 표현으로 인해 유효 숫자를 가지기에 무한으로 연속되는 소수는 오차가 생길 수밖에 없기 때문이다. (0.1이 왜 무한으로 연속되는 소수로 인식되는지는 이전 게시물을 참고하자!)
- 따라서 부동소수점은 근사 표현법일 뿐 항상 유효하고 합리적인 결과를 얻을 수 있는 것은 아니다. 비교 연산 시 특히 이 점을 유의해야한다!!! ★★
2. 문자 정보 표현과 문자 자료형
● 문자 코드/ 부호
- 각 문자에 고유 번호(숫자)를 부여하여 표현한 것이 바로 문자 코드/부호이다.
- 대표적인 문자 코드는 ASCII 코드이다.
+) 예를 들어 'A' 는 0x41, 4*16 + 1 = 65(10진수)로 표현된다.
+) 한글은 UTF-8과 같은 문자 코드로 인코딩할 수 있다.
● 문자 자료형 (char)
- char 자료형은 아스키 코드가 메인 문자 코드 ★★, 1 byte 크기의 정수값을 가짐
- '문자' 또는 코드 값(숫자)로 표시 가능하다.
- 문자 값 표시를 위한 형식 지정자 -> %c
#include <stdio.h>
int main(void)
{
char c1 = 'A';
int c2;
printf("%c\n",c1);
c1 = 65;
printf("%c\n",c1);
c1 = 0x41;
printf("%c\n",c1);
c2 = 'A';
printf("%c, %d\n",c1,c1);
printf("%c, %d\n",c2,c2);
return 0;
}
>>>
A
A
A
A, 65
A, 65
- line 8,9에서 c1, c2에 대해 출력 결과는 동일하지만 필요한 메모리 양에 차이가 있다.
● 문자 코드의 연산
#include <stdio.h>
int main(void)
{
char ch = 65;
printf("%c\n", ch);
printf("%d\n", ch);
return 0;
}
>>>
A
65
- 변수에 저장할 때는 직접 char ch = 'A' 또는 char ch = 65 모두 가능
- 심지어 char ch = 'C' 와 char ch = 'A' + 2 는 같음
#include <stdio.h>
int main(void)
{
char ch;
scanf("%c",&ch);
printf("%c\n",ch);
printf("%d\n",ch);
return 0;
}
>>>
A
A
65
- 허나 scanf에서는 반드시 문자 코드 값을 변수에 저장해야함
+) character 분류하기
#include <stdio.h>
/**
* @brief : Checks if the given character is an alphabetic character
* @return: Non-zero value if the character is an alphabetic character, zero otherwise
* @param : ch - character to check
*/
int is_alpha(char ch) {
// Enter your Code Here
return ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'));
}
/**
* @brief : Checks if the given character is an uppercase alphabetic character
* @return: Non-zero value if the character is an uppercase, zero otherwise
* @param : ch - character to check
*/
int is_upper(char ch) {
// Enter your Code Here
return (ch >= 'A' && ch <= 'Z');
}
int is_lower(char ch){
return (ch >= 'a' && ch <='z');
}
int main(void) {
char ch;
scanf("%c", &ch);
printf("%c is ", ch);
if (is_alpha(ch)) {
if (is_upper(ch)){
printf("an uppercase alphabetic character\n");
}
else if (is_lower(ch)){
printf("a lowercase alphabetic character\n");
}
}
else{
printf("is not an alphabetic character\n");
}
return 0;
}
'CS > C, C++' 카테고리의 다른 글
[C/C++] 05-4 다양한 자료형과 자료 표현 - 연산자 (0) | 2021.10.03 |
---|---|
[C/C++] 05-3 다양한 자료형과 자료 표현 - 문자열 (0) | 2021.10.02 |
[C/C++] 05-1 다양한 자료형과 자료 표현 - 정수형 (0) | 2021.09.29 |
[C/C++] 04 - 2 함수 선언과 변수 유효 범위 (0) | 2021.09.25 |
[C/C++] 04-1 함수 개념과 호출 구조, 재귀 호출 (0) | 2021.09.25 |