상세 컨텐츠

본문 제목

C언어 강좌 5강 연산자 5-5

카테고리 없음

2020. 3. 21. 12:03

본문

연산자 마지막 입니다.

 

오늘은 비트 연산자를 배워봅시다!

 

8. 비트 연산자: &, |, ^, ~, >>, >>

비트 연산자인 &, | 연산자는 논리 연산자와 조금 비슷 합니다.

 

1. &연산자

&(AND)연산자는 2개의 비트가 참이여야 참이고 1개라도 거짓이면 거짓입니다.

4행 정수형 변수 a, b 선언 a = 20, b = 16 저장

5행 정수형 변수 r 선언후 0으로 초기화

7행 a와 b를 &시켜 r에 저장

8행 변수 r 출력

 

출력 결과

저게 16이 나올수있는 이유는

0001 0100 = 20

0001 0000 = 16

&는 둘다 참이여야 참이기때문에 16을 출력을 시킵니다.

숫자를 바꿔가면서 해보세요!!

 

2. |연산자

|(OR)연산자는 비트가 1개여도 참이고, 2개다 거짓이면 거짓입니다.

4행 정수형 변수 a, b 선언 a = 20, b = 16 저장

5행 정수형 변수 r 선언후 0으로 초기화

7행 a와 b를 |시켜 r에 저장

8행 변수 r 출력

 

출력 결과

이것도 이렇게 나올수있는 이유는

0001 0100 = 20

0001 0000 = 16

|은 1개만 참이여도 참이기때문에 20을 출력을 시킵니다.

이것도 숫자를 바꿔가면서 해보세요!!

 

3. ^연산자

^(XOR)연산자는 비트가 서로 같지않을때 참 입니다.

4행 정수형 변수 a, b 선언 a = 20, b = 16 저장

5행 정수형 변수 r 선언후 0으로 초기화

7행 a와 b를 ^시켜 r에 저장

8행 변수 r 출력

 

출력 결과

0001 0100 = 20

0001 0000 = 16

^연산자는 같지 않을 경우 참이기 때문에

1 == 1 = 0

0 == 0 = 0

0 == 1 = 1

1 == 0 = 1

이라서 4를 출력을 할수가있습니다.

 

4. ~연산자

~(NOT)연산자는 비트를 반전을 시킵니다.

(논리 연산자때는 !이게 NOT이였지만 비트 연산자에서는 ~에게 NOT입니다.)

4행 정수형 변수 a 선언, a = 20 저장

5행 정수형 변수 r 선언후 0으로 초기화

7행 a를 ~시켜서 r에 저장

9행 변수 r 출력

 

출력 결과

0000 0000  0000 0000  0000 0000  0001 0100 = 20

1111 1111  1111 1111  1111 1111  1101 1011 = -21

~연산자는 반전을 하기 때문에 이렇게 됩니다.

 

근데 여기서 여러분들은 왜 -20이 아니라

-21이지 라고 생각하는분들이 있을수가 있으니 알려드리겠습니다.

 

0000 0000  0000 0000  0000 0000  0001 0101 = 21 

1의 보수 시킵니다.

1111 1111  1111 1111  1111 1111  1101 1010

= -20

-20에 1을 더합니다.

0000 0000  0000 0000  0000 0000  0000 0001 = 1              

=

1111 1111  1111 1111  1111 1111  1101 1011 = -21

 

음수를 양수로 바꾸고 싶다면

0000 0000  0000 0000  0000 0000  0001 0100

+0000 0000  0000 0000  0000 0000  0000 0001 =

0000 0000  0000 0000  0000 0000  0001 0101 = 21

 

이렇게 양수로 바꿀수가 있답니다!

 

 

0000 0000  0000 0000  0000 0000  0000 0000 = 0

0000 0000  0000 0000  0000 0000  0000 0001 = 1

0000 0000  0000 0000  0000 0000  0000 0010 = 2

0000 0000  0000 0000  0000 0000  0000 0011 = 3

 

1111 1111 1111 1111  1111 1111  1111 1111 = -1

1111 1111  1111 1111  1111 1111  1111 1110 = -2

1111 1111  1111 1111  1111 1111  1111 1101 = -3

1111 1111  1111 1111  1111 1111  1111 1100 = -4

1111 1111  1111 1111  1111 1111  1111 1011 = -5

1111 1111  1111 1111  1111 1111  1111 1010 = -6

1111 1111  1111 1111  1111 1111  1111 1001 = -7

1111 1111  1111 1111  1111 1111  1111 1000 = -8

1111 1111  1111 1111  1111 1111  1111 0111 = -9

1111 1111  1111 1111  1111 1111  1111 0110 = -10

1111 1111  1111 1111  1111 1111  1111 0101 = -11

1111 1111  1111 1111  1111 1111  1111 0100 = -12

1111 1111  1111 1111  1111 1111  1111 0011 = -13

1111 1111  1111 1111  1111 1111  1111 0010 = -14

1111 1111  1111 1111  1111 1111  1111 0001 = -15

1111 1111  1111 1111  1111 1111  1111 0000 = -16

 

 

5. <<, >>연산자

<<(비트 왼쪽 시프트 연산자)연산자는 비트를 왼쪽으로 이동 시킵니다.

>>(비트오른쪽시프트연산자)연산자는 비트를 오른쪽으로 이동 시킵니다.

4행 정수형 변수 Left 선언 Left에 5 저장

5행 정수형 변수 Right 선언 Right에 8 저장

6행 정수형 변수 r 선언후 0으로 초기화

 

8행 변수 Left를 왼쪽으로 2비트 이동을 하고 변수 r에 저장

0000 0101 = 5 

 

여기서 1비트 왼쪽을 이동을 하면

0000 1010 = 10

 

또 1비트 왼쪽을 이동을 하면

0001 0100 = 20

 

9행 변수 Left가 저장된 변수 r을 출력

 

11행 변수 Right를 오른쪽으로 3비트 이동을 하고 변수 r에 저장

0000 1000 = 8

 

여기서 1비트 오른쪽을 이동을 하면

0000 0100 = 4

 

또 1비트 오른쪽을 이동을 하면

0000 0010 = 2

 

또 1비트 오른쪽을 이동을 하면

0000 0001 = 1

 

12행 변수 Right가 저장된 변수 r을 출력

 

 

C언어 연산자 끝~

2020. 04. 06일에 C언어 자료형 6-1을 올리도록 하겠습니다.

 

댓글 영역