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을 더해준다. (브라보!)
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형 변수는 다루기 힘든 건가..
