Chapter4. 데이터 표현방식의 이해
컴퓨터가 데이터를 표현하는 방식
- 2진수 : 컴퓨터에 기본적으로 저장되어 있는 방식
- 8진수 : 0으로 시작하면 8진수로 인식, ex)012 = 10
- 10진수 : 평소에 우리에게 익숙한 수
- 16진수 : 0x로 시작하면 16진수로 인식, ex)0xA = 10
데이터의 표현위인 Bit와 Byte
- Bit : 2진수 값 하나, 0
- Byte : 8개의 Bit를 모은 값, 00000000
정수와 실수의 표현 방식
- 정수의 표현 방식 : 4Byte(32Bit)를 사용하여 저장함
- 부호를 표현하기 위해 가장 왼쪽의 bit를 MSB(Most Significant Bit)로 사용, 나머지 7bit로 크기를 나타냄, 양수는 0, 음수는 1로 표현
- 음의 정수를 표현할 때에는 2의 보수법(Not연산 + 1)으로 처리함 ex)00010000(16) 11110000(-16)
- 실수의 표현방식 : 정수부분, 소수부분을 나누어서 저장, 컴퓨터는 실수를 100% 정확히 표현하지 못함, 근사치일뿐

비트연산자
- & : 비트 단위로 AND 연산
- | : 비트 단위로 OR 연산
- ^ : 비트 단위로 XOR 연산
- ~ : 단항 연산자로서 피연산자의 모든 비트를 반전시킨다, MSB도 반전되어 부호마저 바뀜(NOT 연산, 보수연산)
- << : 피연산자의 비트열을 왼쪽으로 이동시킴 ex)num<<2 = 두번이동 / 1칸씩 이동할때마다 2배가 됨, 4Byte가 넘는 비트들은 버려진다, 곱셈, 나눗셈보다 성능이 좋음
- >> : 피연산자의 비트열을 오른쪽으로 이동시킴 ex)num>>2 / MSB의 자리가 0,1로 채워지게 되는데 이떄 CPU에 따라 채워넣는 수가 달라진다, (보통 부호를 유지하여 /2가 됨)
Chapter5, 상수와 기본 자료형
자료형이란? 데이터를 표현하는 방법!
기본 자료형의 종류와 데이터 표현 범위
자료형 | 크기 | 값의 표현 범위 | |
정수형 | char | 1Byte | -128이상 +127이하 |
short | 2Byte | -32,768이상, +32767이하 | |
int | 4Byte | -2^32이상, +2^32-1이하 | |
long | 4Byte | -2^32이상, +2^32-1이하 | |
long long | 8Byte | -2^64이상, +2^64-1이하 | |
실수형 | float | 4Byte | +-3.4*10^-37이상, +-3.4*10^+38이하 |
double | 8Byte | +-1.7*10^-307이상, +-1.7*10^+308이하 | |
long double | 8Byte 이상 | double 이상 |
sizeof연산자 : 자료형의 크기를 반환해주는 연산자, 연산결과로 반환되는 값의 크기도 표현 가능
ex) num=sizeof(int), num=4, num=sizeof(char), num=1
정수를 표현 및 처리하기 위한 일반적인 자료형의 선택
- char, short형 연산은 int로 형변환 하여 진행함(컴퓨터의 효율, 연산속도 상승) But 중요도가 연산속도 < 데이터크기 인 데이터를 저장할 때에는 char, short 자료형이 더 유리함
실수를 표현 및 처리하기 위한 일반적인 자료형의 선택
- 실수 자료형 선택에 있어서 가장 중요한 요소는 '정밀도'
- float 형의 소수점 이하 정밀도 : 6자리(까지 요차 발생X)
- double 형의 소수점 이하 정밀도 : 15자리 (정수의 int 형처럼 보편적으로 사용 되긴 함)
- long double 형의 소수점 이하 정밀도 : 18자리
unsigned 를 붙여 0과 양의 정수만 표현
- 정수 자료형의 이름에 한해서 unsigned 선언을 추가하면 MSB도 데이터 크기를 표현하는데 사용됨, 따라서 0이상 값의 2배를 표현할 수 있게 된다
- ex) char의 범위 = -128이상 +127이하, unsigned char의 범위 = 0이상 255(128+127)이하
문자의 표현방식과 문자를 위한 자료형
- 문자의 표현을 위한 약속 아스키 코드(ASCII Code) = 숫자를 문자에 연결(mapping)하는 방식을 사용함 따라서 저장될 때에는 정수형태로 저장됨
- char 자료형에 저장됨(문자형으로 불리지만 저장은 정수 형태로 저장된다)
- ex) char ch1 = 'A', printf("%d", ch1); 작성시 65 출력
상수에 대한 이해
- 상수란? 변경이 불가능한 데이터, 크게 이름이 있는 상수, 이름이 없는 상수로 나뉨
- 이름을 지니지 않는 리터럴(Literal) 상수 : 메모리 공간에 할당 되지만 변수와 달리 이름이 없음 ex)num = 10 + 11 에서 10과 11은 리터럴 상수 이다.
- 이때 연산을 위해 메모리 공간에 상수 형태로 저장됨 이때 메모리에 저장되는 리터럴 상수도 자료형을 가지게 된다! 정수형은 int로, 실수형은 double의 형태로 저장된다.
- 접미사를 이용해 상수의 자료형을 변경할 수 있다, ex) float num = 5.789 일 경우, 5.789는 double 형으로 저장된 상태이다. 이때 float형 변수에 저장할 경우 4byte가 잘려나갈 수 있다. 이때 5.789f를 사용하여 상수를 float형으로 저장해 주면 된다.
접미사 자료형 예 U unsigned int unsigned int n = 1025U L long long = 2467L UL unsigned long unsigned long n = 5567UL LL long long long long n = 2456LL ULL unsigned long long unsigned long long n = 4234ULL F float float f = 3.234F L long double long double f = 5.234
- 이름을 지니는 심볼릭(Symbolic)상수 : const 상수
- 변수 선언시 const 키워드를 사용해 주며 된다. ex) const int MAX = 100;
- 이때 꼭 선언과 동시에 초기화를 해 주어야 한다!!
- 이름을 지니지 않는 리터럴(Literal) 상수 : 메모리 공간에 할당 되지만 변수와 달리 이름이 없음 ex)num = 10 + 11 에서 10과 11은 리터럴 상수 이다.
자료형의 변환
- 자료형의 변환이란? 자료형으로 표현된 데이터를 다른 자료형으로 바꾸는것 자동(묵시적)과 강제(명시적)이 있다
- 자동 형 변환(묵시적 형 변환)
- 대입 연상의 전달과정에서 발생하는 자동 형 변환
- 변수에 들어갈 피 연산자의 자료형이 변수의 자료형과 맞지 않을 경우 발생
- 실수형->정수형 : 실수부분 삭제
- 데이터의 표현 범위가 넓은 자료형으로의 변환은 손실 발생X
- 데이터의 표현 볌위가 좁은 자료형으로의 변환은 손실 발생O 이때 상위 비트가 삭제되므로 부호가 변경될 수도 있음
- 정수의 승격(Integral Promotion)에 의한 자동 형 변환
- 앞에 설명했듯이 short형이나 char등의 정수형은 연산시 int 형으로 변환하여 연산됨!
- int보다 좁은 범위의 정수형 자료형은 int로 변환된 뒤에 연산됨(넓은 자료형은 손실때문에 사용X)
- 피연산자의 자료형 불일치로 발생하는 자동 형 변환
- 사칙연산과 같은 기본적인 산술시에 두 자료형이 일치하지 않을때 사용
- ex) double num = 2.15 + 19; 19는 int형 이므로 double형으로 변환함
- 이때 데이터 손실을 최소화하는 방향으로 진행되므로 형 변환 규칙이 존재함
- int -> long -> long long -> float -> double -> long double (short, char은 산술시 사용X)
- 대입 연상의 전달과정에서 발생하는 자동 형 변환
- 강제 형 변환(명시적 형 변환)
- 형 변환 연산자(type casting operaor)를 사용하여 변환한다 ex) int a = 4, double b = (double)a;
'IT공부 > 윤성우 열혈 C프로그래밍' 카테고리의 다른 글
포인터와 배열의 시작_2 (0) | 2022.02.04 |
---|---|
포인터와 배열의 시작_1 (0) | 2022.02.02 |
C언어의 기본_4 (0) | 2022.01.29 |
C언어의 기본_3 (0) | 2022.01.26 |
C언어의 기본_1 (0) | 2022.01.23 |