차원
c에서 모든 상수와 변수는 차원이 있다.
일반상수(숫자,문자 등)는 0차원이다.
주소상수 (문자열상수,주소상수)는 1차원 이상이다.
변수역시 일반 변수는 0차원, 포인터변수는 1차원 이상이다.
데이터와 자료형
자료형이 있는 이유는 데이터를 메모리에 저장및 활용시 효과적으로 하기 위해서이다.
또한 자료형마다 저장하는 방식이 달라야하기 때문이다. 실수와 정수를 들여다보자.
정수는 2의 보수를 이용하여 표현한다. sign bit를 이용하여 양수와 음수르 표현한다.
하지만 실수는 이렇게 표현하게되면 소수점 밑자를 표기할수가 없다.
소수점밑을 최대한 정밀히 표현하기 위하여 부동소수점 방식을 이용한다.
double의 경우 sign 1, 지수 11, 가수 52bit로 표기를 한다.
지수부는 지수승+bias(지수부최대값/2)이다.
지수부은 11자리이니 최대값은 2^11-1 이다.이를 2로 나누면 1023이다.
예를 들어 보겠다.
5.25가 있다.
이를 부동소수점 방식으로 한번 나타내어 double에 저장될때 어떠한 방식으로 되는지 보겠다.
sign비트는 귀찮으니 일단 고려하지않겠다.
5.25->101.01<5.25> -> 1.0101*2^2 로 나타낼수 있고.
지수승 + bia =1025이니
10000000001 / 010100000000000000000000...
이러한 방식으로 된다.
하지만 위에서만 보아도 정수형과 실수형 자체의 저장방식이 다르기때문에 왠만해서는 형변환이 없도록 하게 해주자.
형변환
연산을 할때 두 피 연산자의 타입이 다른경우 타입을 맞추기 위하여 자동으로 일어나는 형변환이다.
0차원의 기본 데이터만 이용한다. 작은형이 큰형으로 변환된다.
가장작은것은 double,가장큰것은 int이다.
즉 정수->실수는 불가능(동일한 숫자로)하고 실수에서 정수는 가능하다.
대입연산자의 경우 <- 순으로 되니 Rvalue는 Lvalue의 타입으로 변환된다.
강제 형 변환을 하기 위해서는 cast연산자를 사용한다.
double d=(int)3.14
'언어 > c' 카테고리의 다른 글
배열 (0) | 2018.02.01 |
---|---|
함수_return_parameter_static_swap (0) | 2018.02.01 |
switch 문과 if문의 차이 (언제 switch를 쓰고 언제 if를 사용할까?) (0) | 2018.01.29 |
라이브러리함수_코딩의순서(기본)_문장의종류_프로그램 실행과정 (0) | 2018.01.29 |
문자열이 scanf를 통하여 초기화 될시 남는 배열은 어떻게 될까? (0) | 2018.01.26 |