[C] if 조건문

2021. 1. 5. 14:34프로그래밍 공부/C 공부

if조건문은 피해라!

컴퓨터는 명령을 순차적으로 수행하는데 if조건문은 실행흐름을 변경하기 때문에 if 조건문 사용을 줄이는게 효율적이다.

if조건문을 대신할 수 있는것에는 어떤것들이 있을까? 

 

[조건 수식]

"변수 var값이 5이면 2를 더한다." 라는 조건 실행을 아래의 두가지 경우로 나눠서 실행할 수 있다.

처리할 데이터양이 더 많아진다면 조건 수식을 활용한 경우의 효율성이 더욱 증가한다.

/* if 조건문 활용 */

void main() 
{
 shrot var ;
 if(var ==5){var += 2};
}

/*조건 수식 활용*/
void main() 
{
 shrot var ;
 var += 2 * (5 == var);
}

boolean 을 활용한 조건수식도 있다.

&& 연산과 || 연산을 활용하여 조건문을 만들 수 있다.

//....

int var = 3 

void and () 
{
var > 3 && var++
}

void or () 
{
var > 3 || var ++ 
}

&&연산은 전항이 참일경우 후항도 참인지 확인(실행)하므로 and 함수에서 var가 3이상일 경우 var는 1 증가하게된다.

||연산은 전항이 참일경우 후항은 확인(실행)하지 않으므로 or 함수에서 var가 3이상일 경우 var의 값은 변하지 않는다. 

 

 

항상 if문보다 조건 수식을 사용해야겠다는 마음가짐이 필요하다고 한다...

 

이러한 처리들에서 프로그래머의 실력이 명확히 들어나는 것이 아닐까?

나는 아직 잘할 자신이 없다.

 

if조건문을 쓴다면 조건 수식을 단순화시켜라!

if(0 != var ) 조건의 경우 if(var)로 단순화 할 수 있다.

해당 조건은 var가 0인 경우 거짓을 0이 아닐경우 참을 반환하기 때문에 이는 1과 0으로 참과 거짓을 판단하는 컴퓨터의 기본 포멧과 일치하므로 단순화 할 수 있다.

 

같은 매락으로 if(0==var) 는 if(!var) 로 단순화된다.

 

if(!(var1 && var2)) 를 단순화 할수는 없을까?

다소 복잡해보이는 이러한 관계식은 진리표를 이용해 손쉽게 단순화할 수 있다. 

var1 var2 var1 && var2 ! var1 ! var2 ! var1 || ! var2
1 1 1 0 0 0
1 0 0 0 1 1
0 1 0 1 0 1
0 0 0 1 1 1

이 표에서 var1 && var2 가 거짓인 경우느 ! var1 || ! var2 이 참인 경우이므로 

if(!(var1 && var2)) = if(!var1 || !var2) 로 표현할 수 있다. (드모르간의 법칙 : 반대의 경우도 마찬가지로 적용됨)

 

이상의 것을 응용하여

if(!(var1 ==0 && var2 ==0)) = if( var1 || var2 ) 로 단순화 시킬 수 있다.

'프로그래밍 공부 > C 공부' 카테고리의 다른 글

[C] void 포인터  (0) 2021.01.06
[C] 포인터 활용  (0) 2021.01.06
[C] 포인터 개념  (0) 2021.01.06
[C] 지역변수와 전역변수(+ extern, static, const)  (0) 2021.01.05
[C] 저장공간 할당  (0) 2021.01.05