/*더하기 1을 하는 방법 */
#include <stdio.h>
int main() {
int a = 1, b = 1, c =1, d = 1;
a=a+1 ;
printf("a: %d \n", a);
b +=1;
printf("b: %d \n", b);
++c;
printf("c: %d \n", c);
d++;
printf("d: %d \n, d);
return 0;
}
1.
a = a+1
a에 1을 더한값을 대입한다.
2.
b += 1
b = b+1 을 간략화한것임.(엄밀히말하면 조금다른데, 나중에 추가적으로 공부하기)
3.
++c; (전위형)
먼저 1을 더해준 후 결과를 돌려줌
d++; (후위형)
결과를 돌려준 이후 1을 더해줍니다.
/* prefix, postfix */
#include <stdio.h>
int main () {
int a = 1;
printf ("++a : %d \n", ++a);
a=1;
printf("a++ : %d \n", a++)
printf("a : %d \n", a);
return 0;
}
4.
printf("++a : %d \n, ++a);
a의 값에 먼저 1을 더한값인 2를 printf 함수에 반환하여 %d에 2가 들어감
printf("a++ : %d \n, a++);
a의 값을 printf에 반환하여 %d 에 1이란 값이 먼저들어감
printf("a : %d \n",a);
따라서 다시 printf 문으로 a의 값을 출력하였을 때에는 2라는 값이 나옴.
(참고로 위 4개의 연산 중에서 가장 빨리연산되는것은 a++와 같은 증감 연산)
5.
비트연산자
1) & (And 연산)
2) | (Or 연산)
3) ^(XOR 연산)
4) <<, >>(쉬프트 연산)
5), ~(반전)
(비트 연산은 암호 분야에서 많이 쓰이며, 쉬프트 연산도 가끔씩 유용하게 쓰임)
6.
And연산 (&)
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0& 0 = 0
ex)
1010 & 0011 = 0010
1111100 & 11(앞에 0으로자리수 맞춰줌) -> 1111100 & 0000011 = 0000000
7.
Or연산(| )
1| 1 = 1
1| 0 = 1
0| 1 = 1
0| 0 = 0
Or연산은 And연산과 대조적. 어느 하나만 1이여도 모두 1이된다.
Ex)
1101 | 1000 = 1101
8.
XOR연산(^)
1^1=0
0^1=1
1^0=1
0^0=0
XOR연산은 두수가 달라야만 1이된다.
EX) 1100^1010 = 0110
9.
반전연산(~)
반전연산은 0을 1로 1을 0으로 바꿔주는것임. 예를들어서 ~ 1100을하면 그결과는 0011이 됨.
10.
<<연산(쉬프트 연산)
비트를 왼쪽으로 (Shift쉬프트)시킨다. 101011을 1만큼 쉬프트 시키면 (이를 a<<1 이라 나타냅니다.)
101011을 왼쪽으로 쉬프트 시키면 1010110 이됩니다.여기서 결과는 기존자리수 6자리인
010110 이됩니다.
<<쉬프트시, 만일 앞에 쉬프트된 숫자가 갈 자리가 없다면, 그부분은 버려집니다. 또한 뒤에서 새로 채워지는 부분은 앞에서 버려진 숫자가 가는것이 아니라 무조건 0으로 채워집니다.
11.
>>연산
오른쪽으로 쉬프트하되, 그 숫자가 갈 자리가 없으면 버려집니다. 이때, 무조건 0이 채워지는 << 연산과는 달리 앞부분에 맨 왼쪽에있던 숫자가 채워짐.
ex)
11100010 >> 3 = 11111100
00011001 >> 3 = 00000011
중요한점은 괄호들이 제 1순위에 위치하였다는것이다. 따라서, 어떠한 연산이라도 괄호로 감싸 주게 되면 먼저 실행되게된다.
12.
오른쪽우선과 왼쪽우선
a = b + c + d +e ;
b+c를 계산하고 그 결과를 반환( 그 결과를 C라 하면)
C+d를 계산하고 그 결과를 반환( 그 결과를 D라 하면)
D+e를 계산하고 그 결과를 반환(그 결과를 E라 하면)
따라서, 위 식은
a = E
가 되죠, 따라서 a에 E의 값, 즉 b + c + d + e의 값이 들어가게됩니다.
13.
또한 위 표에서 몇 안되는 '오른쪽이 우선'인 대입연산자(=)를 살펴봅시다. 만약 대입 연산자가 왼쪽 우선이었다면 아래의 식이 어떻게 계산될지 생각해봅시다.
a = b = c = d = 3;
ex)만약에 왼쪽우선이라면
a=b ; b=c; c=d; d=3의 형식으로 계산되어 a,b,c에는 알수없는 값이 들어감.
하지만 오른쪽 우선이므로 위 식은 d=3; c=d; b=c; a=b의 형식이되어 a,b,c,d 모두 3이 될수 있었습니다.