일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 문자열숫자를 숫자로
- 아스키코드
- 마법이라고 불러도 좋을까?
- Official髭男dism
- 히라이켄
- 백준4344번
- 平井堅
- 자료형
- 아스키코드로 숫자 넣기
- HEAD
- 십진수 16진수
- meta charset=
- ㅇ
- 백준 11720
- 魔法っていっていいかな
- html
- React.js
- 십진수 8진수
- !doctype html
- body
- 異端なスター
- 오버플로우
- 정수와 상수
- 백준 8958번
- Today
- Total
갓비니
[C언어 복습]2. 변수&자료형 본문
#변수와 상수
@변수(Variable) : -프로그램에서 데이터들이 일시적으로 저장되는 공간.
-변수는 메모리에 만들어진다.
-언제든 다른 값으로 변경할 수 있다.
*변수를 이용하지 않는다면 ? -> 메모리의 주소를 이용해서 데이터를 저장해야 한다.
@상수(Constant) : -프로그램에서 한번 정해지면 변경할 필요가 없는 값. 리터럴 상수와 기호 상수가 있다.
-숫자, 문자, 문자열 모두 상수가 될 수 있음.(리터럴 상수)
-상수도 변수와 마찬가지로 메모리에 저장된다.
-변수와 마찬가지로 자료형이 존재한다.
#자료형
자료형의 크기는 간단하게 sizeof 연산자를 이용하면 알 수 있다.
-sizeof(변수이름), sizeof(자료형)
#변수&정수형
@ C 프로그램을 작성 할 때에는 항상 변수를 함수 시작 부분에서 선언해야한다.
@ 자료형을 unsigned라고만 지칭하면 unsigned int와 같은 의미가 된다.
또한 short형은 short int라고 쓸 수 있으며,
long형도 long int라고 쓸 수 있다.
ex)
-int a;
-short a; = short int a;
-long a; = long int a;
#Overflow
각 자료형의 변수들은 각각 나타낼 수 있는 정수의 범위가 제한되어있기 때문에
그 범위를 넘어가게 되면 overflow가 발생하게 된다.
범위를 넘어갔을 경우 다시 처음으로 돌아가서 시작하게 된다.
예) short(-32768~32767)의 경우, 최대값인 32767을 넘어가게 되면 그 다음값은 32768이 아니라 최저값인 -32768의 값을 가지게 된다.
unsigned short(0~65535)의 경우, 최대값인 65535를 넘어가게 되면 그 다음값은 65536이 아니라 최저값인 0을 가지게 된다.
*underflow라는 개념도 존재하는데, 오버플로우와 다르게 수가 너무 작아서 나타내기 힘든 때 나타난다.
오버플로우가 발생해도 컴파일러는 아무런 경고문도 보이지 않으므로 주의하여야 한다.(오버플로우를 겪지 않으려면 큰 자료형을 사용하는게 맘 편하다ㅜㅜ)
#상수
@정수 상수
-정수 상수는 기본적으로 int형으로 간주된다.
int형의 범위를 넘길 경우에는 long형으로 간주된다.
상수의 자료형을 프로그래머가 직접 지정하고 싶은 경우에는
unsigned int의 경우에는 정수 뒤에 u또는 U를 붙이면 되고,
long의 경우에는 정수뒤에 l 또는 L을 붙이면 된다.
unsigned long의 경우에는 정수 뒤에 ul 또는 UL을 붙이면 된다.
ex) 12345lu
@정수 상수는 8진법이나 16진법 등에서도 표기가 가능하다.
-8진수는 숫자 앞에 0를
-16진수는 숫자 앞에 0x를 붙이면 된다.
ex) 십진수를 8진수로
십진수 10을 8진수로 표현하려고 한다면?
10= 1 * 8의1승 + 2 * 8의0승 = 0 1 2 (8)
(012(8)에서 맨 앞의 0은 8진수라는 뜻의 0을 뜻함)
ex) 십진수를 16진수로
십진수 10을 16진수로 표현한다면?
10= 10 * 16의 0승 = 0xA (16)
(0xA에서 0x는 16진수라는 뜻이고,
16진수는 1 ~ 9까지는 수로 표현되고 10부터 15까지는 A~F까지로 표현된다.)
*16진수에서 대문자와 소문자는 구분하지 않는다.
0xA와 0xa는 같은 수이다.
8진수, 10진수, 16진수를 출력하는 프로그램
#include <stdio.h>
int main(void){
int a = 10; //십진수로 10
int b = 010; //8진수 10이고 십진수로는 8
int c = 0x10; //16진수 10이고 십진수로는 16
printf("a = %d\nb= %d\nc= %d\n", a, b, c); //모두 10진법으로 표기
printf("b는 8진수로 %o\n", b); // 8진수로 출력(%o이용)
printf("c는 16진수로 %x\n", c); // 16진수로 출력(%x이용)
return 0;
}
@기호상수
보통 상수와 달리 이름이 없다.
이름을 붙이고 싶으면 기호 상수를 이용한다.
기호상수 정의법
1. #define 사용
-문장의 첫부분에 모여있다.
-보통 컴파일러가 동작하기전 전처리기(preprocessor)가 처리한다.
2. const 키워드 사용
-const를 변수 선언 앞에 붙이면 : 상수가 된다. 선언 시 const가 붙여진 변수는 일단 초기화되면 그 값이 변경 될 수 없다.
-또한 #define과는 다르게 끝에 세미콜론을 붙여야 한다.
ex) #define YEAR 2018
const int YEAR = 2018;ggg
#부동소수점
컴퓨터에서 실수를 표현하는 방법에는 두가지가 있다.
1. 고정소수점(fixed-point)
고정소수점 방식은 소수점의 위치가 고정되어있다. 정수부분과 소수부분에 각각 일정 비트를 할당하는 방식이다. 이 방식은 보기에는 편할 지 모르지만 매우 큰 수는 표현할 수 없다는 단점이 있다.
2. 부동소수점(floating-point)
부동소수점 방식은 浮動소수점 방식, 즉 소수점이 둥둥 떠다닌다는 뜻(!)이다.
실수를 가수와 지수로 나누어서 표현하는 방식이다.
예를 들어 123,456,780,000 이란 수가 있다면 1.2345678 * 10e11 으로 나타낼 수 있다는 것이다.
1.2345678( 가수부분 ) * 10e8( 지수 부분 )
컴퓨터 내에서는 이런 식으로 표현된다.
0 | 1.2345678 | 8
부호비트(1비트) | 가수부분(23비트) | 지수부분(8비트)
**부동소수점 자료형
C에서는 실수를 float, double 두가지 자료형으로 나타낸다.
float는 32비트 유효숫자는 6자리, double은 64비트 유효숫자는 16 이다.
여기서 유효숫자란? 32000이라는 수가 있을 때 3과 2는 의미가 있는 숫자이지만(유효숫자) 나머지 0들은 자릿수를 나타내는데 사용된다.
float 는 단일정밀도(single-precision)
double은 두배정밀도(double-precision)라고 부른다.
double은 float에 비해 비트의 크기가 크므로 보다 정확한 값을 가질 수 있다. 따라서 double을 사용하는 것이 좋다.
#문자형
문자형은 char형으로서, %c를 이용한다.
%c말고도 %d를 이용하는 경우가 있는데 이는 아스키 코드를 사용할때 필요하다.
char c= ' G ';
printf("%c는 %d의 아스키코드를 가진다" , c, c );
라는 문장은
G는 71의 아스키코드를 가진다
라고 출력될 것이다.
char형 변수 c에 정수(1, 2...)를 더하여 %d로 출력하면 정수 값이 나오고, %c로 출력하면 알파벳이 나오게 된다.
*참고로 char형은 문자뿐만아니라 8비트의 정수도 저장할 수 있다.
'Programming > C' 카테고리의 다른 글
[C언어 복습]1. 기초 (0) | 2017.12.28 |
---|