#include<stdio.h>
int main() {
unsigned int m=5, n=2;
// 이 줄에서 %% 로 해주어야 할 것을 %로 한 것이 오류입니다.
// 덧셈의 결과 뺄샘, 나눗셈의 몫, 나눗셈의 나머지 입니다.
printf("m+n=%d, m-n=%d, m/n=%d, m%%n=%d\n" ,
m+n, m-n, m/n, m%n);
// 논리적 관계식의 결과입니다. 참이면 1, 거짓이면 0이 출력이 됩니다.
// m은 n보다 크니까 1이 출력이 됩니다. 작지 않으니까 0,
// 같지 않으니까 0이 출력이 되고
// m은 n보다 작지 않으니까 0이출력이 됩니다.
printf("m>n=%d, m<n=%d, m==n=%d, m>=n=%d, m<=n=%d\n",
m>n, m<n, m==n, m>=n, m<=n);
// 수가 0이 아니라면 참으로 해석이 됩니다.
// m은 참이고 1도 참이므로 &&를 해주면 참(1)이 됩니다.
// m은 참이고 1도 참이므로 ||를 해주면 참(1)이 됩니다.
// m은 참이고 !m은 거짓이므로 0이 됩니다.
// n도 참이고(0이 아니고) !n은 거짓이므로 0이 됩니다.
printf("m&&1=%d, n||1=%d, !m=%d, !n=%d\n",
m&&1, n||1, !m, !n);
// 3항 연산자입니다.
// 앞의 관계식이 참이면 m을 거짓이면 n의 값이 결과값입니다.
// m이 n보다 크므로 결과값은 m입니다.
printf("m>n?m:n=%d\n", m>n?m:n);
// m&n은 비트연산으로 &(and)입니다.
// 2진수로 m은 101이고 n은 10 입니다.
// &를 하면 000이 되기 때문에 결과는 0입니다.
// m|n은 비트연산으로 |(or)입니다.
// |를 하면 111이 되기 때문에 결과는 7입니다.
// m^n은 비트연산으로 ^(xor exclusive or)입니다.
// 둘 중에 한비트만 1이면 1이 됩니다.
// ^를 하면 111이 되기 때문에 결과는 7입니다.
// ~m은 m의 비트를 역전시킨 것입니다.
// 이는 m의 1의 보수입니다.
// 이 수에 1을 더하면 (m의 2의 보수) -5가 됩니다.
// 따라서 ~m은 -6이 나옵니다.
printf("m&n=%d, m|n=%d, m^n=%d, ~m=%d\n",
m&n, m|n, m^n, ~m);
// m<<n 은 m을 왼쪽으로 2비트 쉬프트 시킨 결과입니다.
// 값이 4배가 됩니다. 따라서 20이 나옵니다.
// m>>n은 m을 오른쪽으로 2비트 쉬프트 시킨 결과입니다.
// 101이 2비트 오른쪽으로 쉬프트 되면 1만 남습니다.
// 따라서 결과는 1이 나옵니다.
printf("m<<n=%d, m>>n=%d\n",
m<<n, m>>n);
// (m, n)의 결과는 괄호의 맨 뒤에 나오는 값입니다.
// 따라서 (m, n)의 값은 2가 됩니다.
// m=n 의 결과는 n의 값이 m에 대입되고, 대입된 값이 결과입니다.
// 따라서 결과는 2이고 m의 값, n의 값 모두 2입니다.
printf("(m,n)=%d, m=n=%d\n" ,
(m,n), m=n);
// 먼저 m과 n이 더해지면 4가 됩니다.
// 이는 논리적으로 참으로 해석됩니다.
// &&는 ||보다 우선순위가 높습니다.
// 그래서 &&를 먼저 구합니다.
// m+++n<<2은 m++ +n<<2 로 해석됩니다.
// m++는 2이고 (m은 나중에 3으로 바뀝니다)
// n<<2는 8입니다. 2 + 8은 10이 되어서 참으로 해석됩니다.
// 1은 참입니다. &&를 해주어도 참입니다.
// 하지만 이렇게 모두 구하지 않고 앞부분에서 참이 나오고 || 가
// 나오므로 뒤부분은 구해보지 않고 참으로 해석합니다.
// 따라서 결과는 1입니다.
// 따라서 다음 문장에서 m을 출력해 보면 그대로 2가 나오는 것을
// 알수 있습니다.
printf("m+n||m+++n<<2&&1=%d\n",
m+n||m+++n<<2&&1);
printf("m=%d\n", m);
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
가우스 조던 소거법 (0) | 2013.10.20 |
---|---|
10진수를 2진수, 8진수, 16진수로 (0) | 2013.10.16 |
10001번째 소수구하기 (0) | 2013.10.05 |
C언어 기초공부-중학생의 질문 (0) | 2013.10.05 |
_mainCRTStartUp 외부기호 확인할 수 없슴. (0) | 2013.10.04 |