C의 특징: 명령문 보다는 표현식 ( 수식) 에 중점을 둠
변수 : 프로그램 실행될 때 계산될 값
상수 : 변하지 않는 값
산술연산자
% 빼고는 혼합가능
1. int float 혼합 : foat
2. 둘다 정수일때 / 를 하면 소수는 버림
3. % : 둘다 정수여야함
4.(c99) 나눗셈 ' / ' 의 결과는 0을 향해 버려짐
5. i % j의 값은 i와 같은 부호를 가짐 (첫번째 변수의 부호)
implementation-defined
c standarad 는 의도적으로 일부분을 명시안한채로 둠 > sw 가 채움
> 구현마다 프로그램동작이 달라짐
언어의 목표는 효율성 = 하드웨어 동작과 일치해야함
의존x + 정의된 구현은 문서화 되어야함,
> 하드웨어 동작과의 일치를 통한 효율성을 끌어올리기 위해 일부분을 구현하지 않음
ex) c89에서 -9 / 7 = -1 or -2 때마다 다르게 나옴
좌측 결합, 우측결합
좌측 결합> 이항 계산 : *, /, %, +, - 등등
우측 결합 > 단항 계산 : +, - , = 등등
EX) - + i == - (+i) == - i
> 복잡하니,, 괄호를 plenty 하게 사용하자
lvalue
피연산자의 왼쪽에 들어가는값
ex) 변수 등등
*=, /=, %= 등등 9개
a b 가 있으면 a와b를 계산한걸 a 에 저장함
v += e != v = v + e
드물게 v 의 side effect > v 가 function or pointer
function :
int i=0;
value_plus(){return i++}
v = value_plus()
v += 2;
v + v=2; >> 의도치 않게 v 가 두번 호출 될 수 도있음
pointer
int arr[3] = {1, 2, 3};
int *p = arr;
*p += 2; // 복합 할당 연산자 사용
*p = *p + 2; // 단순 계산과 대입
중간에 포인터p 를 수정하거나 다른곳에서 영향 받으면 결과가 달라질 수도 있음
연산자 순위
1. ++, -- (postfix : i++) > 왼쪽결합
2. ++, -- (prefix : ++i) , 단항+,- (ex) +i > 오른쪽결합
3. * , / > 왼쪽결합
4. + - (add, subtract) > 왼쪽결합
5. +=, %=, > 오른쪽결합
하위 연산자 순위
논리and, 논리or, 조건연산자, 콤마연산자 제외 하고는 없음
> ( a+b ) * (c - d) : a+b , c-d 중 뭐가 더 먼저 할 지는 정해지지 않음
ex)
a = 5;
c = (b = a + 2) - (a = 1);
> 값이 6 or 2 알 수 없음
거듭제곱
1. 곱셈 반복 ( 양의 정수)
2. pow 함수 ( 실수)
% operator
> requires integer operands
> fmod 함수 사용
break , continue
break : 루프를 완전히 끝내고 밖으로 나옴
continue : 루프 내 해당 조건만 끝내고 계속 이어감
'C언어 > C - knk' 카테고리의 다른 글
7.5 sizeof , 8. array (0) | 2024.11.20 |
---|---|
printf, scanf (1) | 2024.11.15 |
변수, 대입, 초기화 (0) | 2024.11.12 |
1장 . 역사,장단점,난해한 C (8퀸문제),, (1) | 2024.11.09 |