변수
폰 노이만 구조 컴퓨터의 기억장소는 C의 변수와 대응할 수 있다.
변수의 6가지 속성들
- 이름
- 타입
- 주소
- 값
- 영역
- 존속기간
바인딩 : 변수에 속성을 부여하는 것.
변수의 주소
프로그램에서 사용되는 변수 type 크기만큼의 기억장소가 대응된다.
l-value : 변수에 대응된 기억 장소의 주소
- 한 변수의 주소는 실행 시점에 따라 다를 수 있다.
- 동일한 이름의 변수는 프로그램에서 사용된 위치에 따라 주소가 다를 수 있다.
- 하나의 기억 장소에 여러 개의 변수 이름이 대응될 수 있다.(alias 현상)
변수의 값
변수에 대응되어 있는 기억 장소에 저장되어 있는 값
변수의 l-value는 변수의 주소, 변수의 r-value는 변수의 값.
C에서는 초기화 하지 않은 변수의 r-value에는 쓰레기 값이 들어있다. 명시적으로 얘기해줘야 한다.
변수의 이름
예약어와 식별자
예약어는 컴파일러와 약속된 단어, 식별자는 사용자가 만든 단어
식별자를 만드는 규칙 : 알파벳, 숫자,_(밑줄, 언더바)만 사용. 숫자로 시작할 수 없다. 대문자와 소문자는 서로 다른 식별자.
변수의 타입
기본 타입과 유도된 데이터 타입이 존재
유도된 데이터 타입의 예시는 배열, 문자열이 있다.
const
const를 사용한 변수는 초기값 수정 불가 - 상수처럼 사용
연산자
C의 연산자
산술연산자 :+ - * / % ++ --
관계연산자 : == > < >= <=
논리연산자 : && || !
비트연산자 : >> << & | ~
지정연산자 : = += -= *= /= %=
3항연산자 : ?:
연산자의 우선순위와 연산 방향은...
C의 특징
Boolean 데이터 타입이 별도로 없고 정수형을 빌려쓴다.
논리연산의 결과는 숫자 1(참) 또는 0(거짓)이 된다.
관계 연산의 결과도 숫자 1(참) 또는 0(거짓)이 된다.
문제점 :
a>b>c와 같은 식도 허용된다.
if(a=0) 과 같은 식도 허용된다.
비트별 논리 합, 곱, 배타적 논리합, 부정연산자
shift 연산자
복합 대입 연산자
그 외 여러 가지 연산자.
연산자 | 연산식 예 | 결괏값 |
형 변환 연산자 | res = (int) 10.7; | res 값은 10 |
sizeof 연산자 | res = sizeof(double); | res 값은 8 |
복합 대입 연산자 | a += 10; | a의 값을 10 증가 |
콤마 연산자 | res = (a, b); | res에 b 값 저장 |
조건 연산자 | res = (a>b) ? a : b; | a가 b보다 크면 res값은 a 작거나 같으면 res 값은 b |
비트 연산자 | a& b; ~a; a<<b; | a 와 b 의 비트 상태에 따라 결괏값이 다름 |
자료형 변환
자료형 변환
(자료)형 변환 : 주어진 데이터의 자료형을 다른 자료형으로 변환
예: 정수->실수, 실수 -> 정수 등 (객체지향언어는 super/subtype으로 형 변환 가능)
방법
자동 형 변환
명시적 형 변환
지정 연산 중 자동 형 변환
지정문에서 연산자의 왼평을 기준으로 형 변환 발생
double num1 = 235; int형 정수 245rk double형으로 자동 형 변환
정수 -> 실수 : 비트 열이 실수로 재구성 되어서 오차 발생
int num2 =3.1415; double 형 실수 3.1415를 int 형으로 자동 형 변환
실수 -> 정수 : 소수점 이상만 비트열을 정수로 재구성 소수점 이하 소멸
큰 정수 -> 작은 정수 상위 비트 손실.
기타 연산 중의 자동 형 변환 1
정수 승격(integral Promotion)
CPU는 대개 int 형 데이터에 최적화 되어 있어서, 연산 중 int로 자동 형 변환이 일어나기도 함
short n1 = 15, n = 25;
short n3 = n1 + n2;
n1과 n2가 int로 바뀌어 더해진 후 다시 short로 형 변환됨.
기타 연산 중의 자동 형 변환 2
피연산자 일치
double num1 = 5.15 + 19;
손실 최소화를 추구.
바이트 크기가 큰 자료형이 우선
정수형이 실수형보다 우선
19를 19.0으로 형 변환하여 덧셈
명시적 형 변환
형 변환 연산자를 사용.
자동 형 변환되는 위치에 명시적으로 변환시키는 것을 추천.
'[언어 공부] > [C]' 카테고리의 다른 글
[C언어 공부] 데이터 변수 연산자 - 2 (0) | 2023.07.24 |
---|---|
[C언어 공부] 데이터 변수 연산자 - 1 (0) | 2023.07.24 |