sizeof 연산자
sizeof : 타입 또는 변수의 크기를 바이트단위로 알려준다.
같은 타입이라도 각 CPU종류와 컴파일러에 따라 크기가 다르기 때문에 필요하다. (같은 int라도 어떤 컴퓨터에서는 4byte, 어떤 컴퓨터에서는 2byte가 가능)
sizeof 변수: 변수의 크기를 byte단위의 정수로 반환.
sizeof (타입): 타입의 크기를 byte단위의 정수로 반환.
ex)
int i = 100;
printf("%d", sizeof i);
printf("%d", sizeof(int));
상수와 리터럴
상수(constant): "한번만 값을 저장할 수 있는 공간."
선언과 동시에 초기화 해야 한다. 한 번 값을 저장하면 변경할 수 없다.
상수는 보통 대문자만으로 이름을 정한다.
const int MAX; //에러.
const int MIN = 0; //OK.
MIN = 100; //에러.
리터럴(literal) : 수학에서 쓰는 상수. 프로그래밍에서 상수와 겹치기 때문에 이름을 바꾼 것. 그냥 숫자.
리터럴에 접미사를 붙여서 변수의 타입을 구분해준다. 그냥 단독으로는 붙이나 안 붙이나 결과가 똑같지만, 계산식에서는 다른 결과를 야기할 수 있다. link: 연산자
ex) 100 == 100LL이지만, (10000000 * 100) ≠ (10000000 * 100LL)이다.
타입 | 접미사 |
---|---|
int | 없음 |
long | L |
unsigned | U |
float | F |
double | 없음 |
long double | L |
접두사도 숫자를 표현하는데 이용된다.
표기 | 뜻 | 예 | 예시 뜻 |
---|---|---|---|
0 | 8진수 | int octNum = 0377 | 377(8), 255(10) |
0x | 16진수 | int hexNum = 0xFF | FF(16), 255(10) |
e | 지수 | double avo = 6.02e23 | 6.02 * 1023 |
* char은 빈칸을 저장할 수 없지만, char[] 는 빈 문자열을 저장할 수 있다.
ex)
char nothing = ''; //ERROR
char blank = ' '; //OK. 띄어쓰기를 넣어주었다.
char[] emptyStr = ""; //OK. 빈 문자열 저장
확장열(escape sequence): 인쇄할 수 없는 문자들을 표현한다. '\'를 붙여서 표현한다. printf("\n")에 들어가던 걔네 맞다. ',",\ 얘네를 표시할 때도 앞에 \를 붙여준다.
ex)
char tab = '\t'; //tab
char tab = 9; //tab의 아스키코드가 9
char quote = '\''; //따옴표 \'
char
상수가 필요한 이유?
→ 숫자(리터럴)에 의미있는 이름을 붙여서 코드의 가독성+유지보수성을 높여준다.
ex) 도형의 면적 구하기
int triangle = 20*10/2;
int rectangle = 20*10;
값을 수정하려면 20, 10을 일일히 다 수정해주어 한다 + 20, 10이 무엇인지 알아보기 힘들다
따라서, WIDHT와 HEIGHT라는 상수를 이용하면 가독성도 좋아지고, 코드를 수정하기도 좋아진다.
const int WIDTH = 20;
const int HEIGHT = 10;
int triangle = (WIDTH*HEIGHT) /2 ;
int rectangle = WIDTH*HEIGHT;
비슷한 방법으로 #define을 이용할 수도 있다.
#define : 전처리기 지시자 중 하나. 컴파일 되기 직전에 코드부에서 특정 문자를 치환한다.
전처리기 지시자라서 끝에 ';'을 붙이지 않는다.
//코드의 WIDTH라는 단어를 20으로 치환하여 컴파일해라.
int rectangle = WIDTH * 10; //20 * 10;
printf("WIDTH== %d",WIDTH); //WIDTH== 20이 출력됨.
이 코드에서 WIDTH라고 쓰인 부분은 컴파일 직전에 20으로 치환되어 컴파일된다. 단, 문자열로 정의된 부분("WIDTH == %d")은 치환되지 않고 WIDTH라는 글자 그대로 나온다. 만약에 문자열에서도 바꿔 보이게 하고 싶다면 ""밖으로 빼내면 된다. 이렇게
printf("I am " NAME". HELLO!");
타입의 일치
변수를 옮겨 저장할 때, 타입을 일치시켜주는것이 좋지만 그럴 수 없는 경우엔 그냥 저장해도 된다.
단, 옮겨 담는 그릇의 크기에 따라 데이터가 잘릴 수도 있다는 건 감안하자.
int a = 10;
double b = 15.27374;
int c = 4;
a = b; // OK. 단, a에는 15만 저장된다.
b = c; // OK. b에는 4.0000이 저장된다.
//0x1234567890 : 5byte (12/ 34/ 56/ 78/ 90 각 1byte씩)
short s = 0x1234567890; //short의 크기: 2byte
int i = 0x1234567890; //int크기: 4byte
실제로 저장되는 것:
s = 0x7890;
i = 0x34567890;
* 높은 자리 부분이 잘린다.
화면 입력과 출력 - printf(), scanf()
printf() : 화면에 데이터 출력하는 함수
scanf() : 화면으로부터 데이터를 입력받는 함수
printf()
지시자 표
* 지시자에 따라 같은 글자라도 다르게 출력된다.
ex)
char ch = 65;
printf("%d", ch); // 65 출력
printf("%c", ch); // A 출력
\* 부호 없는 정수를 출력할 땐 반드시 %u를 이용할것! (%d하면 이상하게 나올 수 있다.)
printf를 할 때 글자수도 제한해줄 수 있다.
ex)
float f = 1.2345678f;
printf("%5f", f); //소수 포함 5자리만 출력
printf("%.3f", f); //소수점 아래 3자리까지만 출력
printf("%5.3f", f); //전체 5자리 중 소수점 아래 3자리까지만 출력(반올림)
printf("%05f", f); //전체 5자리 중 소수점 아래 3자리까지. 나머지 남은 빈자리는 0으로 채움
printf("%e", f); //지수형태로 출력
printf("%g", f); //소수부를 간략하게 출력.
//float은 %f, double은 %lf
scanf()
사용법:
int input;
scanf("%d", &input); //변수명 앞에 &를 붙여준다.
* double을 입력받을 때는 반드시 지시자를 '%lf'로 사용해주어야 한다.
* %d는 엔터만 치면 무시한다. 정수만 입력받기 때문에.
하지만 %c는 Enter나 space도 하나의 문자로 인식해서 받아들인다.
'Study > C,C++' 카테고리의 다른 글
2.3 진법 , 기본형 (0) | 2018.07.19 |
---|---|
2,1 변수와 자료형 (0) | 2018.07.16 |
2. Hello, World! (0) | 2016.12.20 |
1. 기초부터 (1) | 2016.12.20 |
0. Unix와 Linux (0) | 2016.12.20 |