본문 바로가기

Programming/C language

Chapter 05. 연산자 응용 (내용 정리)

sizeof( )


sizeof( )의 매개변수는 "자료형"이다. 


특징 - compile time 연산

cpu 사용 X


필요하다면 아끼지말고 자주자주 써먹자! (유지 보수에 유용하다.)


ex)

sizeof(1)    ->    int    ->    4

sizeof('1')   ->    char  ->    1

sizeof( 3 + 1.2 )    ->    double    ->    8


int aList[5];

sizeof( aList )    ->    int[5]    ->    20

( aList는 주소이긴 하나 pointer는 아니다. )


memset 같은 함수를 사용할 때, 크기를 직접 계산하려 하지말고 sizeof에게 시켜라. ( machine code 에서는 동일하다. )


(디스 어셈블 결과 둘이 완전히 동일하다는 사실을 알 수 있다.) 


debug 모드에서 Alt + Ctrl + D 를 누르면 디스 어셈블을 할 수 있다. 



크기 비교


computer == 전가산기


A, B의 크기를 비교할 때 - 연산을 사용한다. 

- 이런 역할을 하는 함수로는 memcmp( ), strcmp( )가 있다.


실수는 오차가 있을 수 밖에 없으므로 상등 or 부등 연산은 '절대' 하지 말자.

ex) 2147483600.0F == 2147483648.0F    <-    같다고 나온다.. 



논리 연산자


Short Circuit


- 논리 연산은 무조건 L -> R 방향

- 안해도 되는 연산은 하지않는다. 


구문1 && 구문2    =>    구문1이 거짓이면 구문2는 연산하지 않고 거짓을 출력한다.  


구문1 && 구문2 || 구문3    => 구문1이 거짓이면 구문2는 연산하지 않고 구문3으로 jump 한다. 


short circuit을 이용한 효율적인 코딩방법


1. 비교할 연산자 중 더 빠른 연산식을 왼쪽에 둔다. 


2. or 연산의 경우 참일 확률이 높은 구문을 왼쪽에 둔다. 

   and 연산의 경우 거짓일 확률이 높은 구문을 왼쪽에 둔다. 



while( !a ) 보다는 while( a== 0 )을 쓰자 (직관성) 

"code는 일기가 아니다."



프로그래밍 기본요소


분류와 선택


최대값 구하기 


a    b    c    =>     변수를 만들고 그 곳에 a를 넣는다. 

b를 가져와 a보다 크면 넣고 아니면 a를 유지한다.

c를 가져와 변수에 있는 값보다 크면 넣고 아니면 변수 값을 유지한다. (서바이벌 방식)


a    b    c    =>    a와 b를 비교해서 큰 것과 c를 비교한다. (토너먼트 방식)




- 출처 : 독하게 시작하는 C 프로그래밍 (최호성, 루비 페이퍼)