본문 바로가기

프로그래밍

c# 연산

/*더하기 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이 될수 있었습니다.

'프로그래밍' 카테고리의 다른 글

c# 기초 if문  (0) 2020.02.21
c#기초 scanf  (0) 2020.02.20
c#기초 사칙연산  (0) 2020.02.19
c# 기초 메모리  (0) 2020.02.19
c#기초 2진법  (0) 2020.02.18