if(input == 5)
 num = 5;
else
 num = 0;


이런 패턴이 있다면 더 줄여 보고자 하는 욕심을 가지는 것이 좋다.

삼항조건연산자는 그저 이게 맞다면 앞에꺼 리턴 이런 생각을 가지기 쉬운데 더 응용해보자.

num = (input == 5) ? 5:0; 로 위에 코드를 대폭 줄일 수 있고 또,

(input == 5) ? ((output == 'a') ? 5 : 0) : 0; 같은 코드를 사용해서 if문을 중첩한 효과를 낼수

있다.

0과 다른수를 리턴하고자 할때 아주 간단하게 표현 가능한데

num = (input == 5) * 5;

생각해보면 간단하지만 참일때 1 , 거짓일때 0을 리턴한다는 것을 잘 활용한게 아닌가 싶다.


여러코드를 코드를 보다보면 이렇게도 응용을 할수 있구나라는 생각이든다.

과연 그 코드를 모르는 상태에서 이러한 코드를 생성할수 있을까...

/*10진수를 16진수로 출력하는 프로그램*/
#include <stdio.h>

void main()
{
 int input;
 int low, hi;

 while(1)
 {
  printf("0~255사이의 수를 입력하시오: ");
  scanf("%d", &input);
 
  hi = input >> 4;
  low = input & 0xf;
  printf("입력한 수의 16진 표기 = %c%c\n", hi+'0'+(hi > 9)*7, low+'0'+(low > 9)*7);

 }
}

10진에서 16진수를 구하기 위해 상위비트는 비트연산자를 통해 구하고

하위비트는 논리연산자로  마스크(?)를 만들어서 변수에 저장 시켰다.

그리고 나서 이를 16진수로 바꾸기 위해서 0의 아스키코드값 48과 더하면 9를 초과하는지의

여부를 알 수 있다. (hi >9)가 참이면 1 아니면 0을 리턴하는 것을 응용하여 9를 초과 했다면

아스키코드값이 대문자 A가 부터 표현하기 위해 7을 더해준다. (브라보!)

3.15(목) float형에 대해서

from Study/C언어 2007/03/15 10:27 view 28549

  scanf("%f", &f);
  printf("%f\n", f);

float형 변수 f에 임의의 수를 입력했을 때 컴파일러가 문제인지 몰라도 12.2를 입력하면

12.200000 이 출력 되는데

  printf("%d\n", i=(int)(f * 100));
  printf("i = %d\n", i%100);

이런 코드를 통해 소수점 이하 두자리를 구하려고 하니깐 19가 나온다..-_-;;

초난강 모드로 빠져 든다.

float형 변수는 다루기 힘든 건가..