본문 바로가기

컴퓨터 일반/프로그래밍언어론

프로그래밍(2) C언어 연산자

산술 연산자 : 전치연산/후치연산

a = 1;
b = ++a +1; //먼저 증가시키고 치환한다, 2+1=3을 b에 넣는다, a=2이다
c = a++ +1; //연산 후에 치환한다, c=3, 그 다음에 a=3

 

https://www.youtube.com/watch?v=9MQfev_CE_U&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=67

a b c
2    
1    
2 4 (1과 3을 더한 것)  
3   6 (a에 1을 더한 3에 3을 더한 것)
3 4 6

 

프로그래밍은 적으면서 해야 편하다(디버깅)

처음에는 낯설지만 하다 보면 점점 쉬워진다

하지만 반드시 디버깅 해야한다

안다고 머리로 풀면 백퍼센트 틀린다. 한 줄 한 줄 시키는대로 그대로 추적해서 그대로 써야 한다

C언어의 관계 연산자와 비트 연산자, 논리연산자

관계 연산자는 두 수의 대소를 비교하고, 비트 연산자는 컴퓨터가 저장하는 최소 단위인 비트끼리 연산하는 것이다

관계 연산자
비트 연산자
논리 연산자

우선순위는 산술 연산자 > 관계 연산자 > 논리 연산자 ( not > and > or)

 

https://www.youtube.com/watch?v=9MQfev_CE_U&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=67

a b c d e f
5 7        
    5      
      7    
        2  
          -8
2          
  56        
  • c언어는 정수형이 4바이트, 즉 32비트까지 나타낼 수 있다
  • a를 1바이트(8비트)로 나타내면 00000101 이다
  • b를 1바이트(8비트)로 나타내면 00000111 이다
  • a & b 는 00000101 = 5
  • a | b 는 00000111 = 7
  • a ^ b는 00000010 = 2
  • ~b는 비트 부정이기 때문에 반대로 바꿔준다 즉, -8이 된다
  • 11111000 ⇒ 앞자리는 부호비트, 원래 값은 2의 보수로 표현된 것을 다시 2의 보수로 만든다(1의 보수에 1을 더한다) 오른쪽부터 처음 1이 나올때까지는 그대로 써주고, 그 다음부터는 반대로 써준다

  • a >> 1은 오른쪽으로 1비트씩 이동한다
  • 00000101 → 00000010 = 2
  • b << 3은 왼쪽으로 3비트씩 이동한다
  • 00000111 → 00111000 = 56

 

https://www.youtube.com/watch?v=9MQfev_CE_U&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=67

a b c d e
2 3      
    0    
      1  
        1
  • false는 0, true는 1이다
  • c = a > 3 && b > 2
  • a는 2이므로 false이고 and 연산이므로 0이다
  • a는 2이므로 false이지만 b는 3으로 true이고 or 연산이므로 1이다
  • e는 !c이므로 1이다

 

대입 연산자

https://www.youtube.com/watch?v=9MQfev_CE_U&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=67

a b c
2 3 4
4 6 0
  • a+=2는 a+2를 한 것을 대입한 것이다
  • b*=2는 b*2를 한 것을 대입한 것이다
  • c%=2는 2로 나눈 것의 나머지를 대입한 것이다

 

조건 연산자

말 그대로 조건에 맞는 것을 수행하며 항이 3개라 삼항 연산자라고도 한다.

형식 : 조건 ? 수식1 : 수식2;

조건이 참이면 수식1이, 조건이 거짓이면 수식2가 실행된다

https://www.youtube.com/watch?v=9MQfev_CE_U&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=67

a b c d
10 20    
    20  
      10
  • c = a>b? a : b; //a가 b보다 크다면 a를, 그렇지 않다면 b를 대입한다
  • b = a>b? a-b : b-a; //a가 b보다 크다면 a-b를, 그렇지 않다면 b-a를 대입한다