C언어/C - knk

4장

twoweeks-within 2024. 11. 16. 18:44

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