티스토리 뷰

반응형

2021.04.14 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 1

 

C 언어 기초 : 연산자 1

2021.02.07 - [코딩 공부/C 언어] - C 언어 기초 : scanf 로 원하는 데이터 입력 받기 C 언어 기초 : scanf 로 원하는 데이터 입력 받기 이전 글 2021/02/06 - [코딩 공부/C 언어] - C언어 기초 : 암시적 형변환과..

hgu-can.tistory.com

2021.04.16 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 2

 

C 언어 기초 : 연산자 2

2021.04.14 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 1 C 언어 기초 : 연산자 1 2021.02.07 - [코딩 공부/C 언어] - C 언어 기초 : scanf 로 원하는 데이터 입력 받기 C 언어 기초 : scanf 로 원하는 데이터..

hgu-can.tistory.com

C 언어 연산자 파트 1, 2에 이은 마지막!

비트 연산자 파트입니다. 

처음에 보면 무슨 말인가 싶은데 쓸 일이 별로 없어서 한 번에 이해가 되지 않으시면

나중에 다시 돌아와서 보셔도 됩니다. 


비트 연산자

데이터를 비트단위로 연산수행하는 연산자

 

연산자 의미 예시
& Bit 단위로 And 연산 10 & 5
| Bit 단위로 Or 연산 10 | 5
^ Bit 단위로 Xor 연산 10 ^ 5
~ Bit 단위로 Not 연산 ~10
<< Bit 단위로 Left Shift 연산 10 << 1
>> Bit 단위로 Right Shift 연산 10 >> 1

비트 연산자에는 여러가지가 있는데 쓸 일이 많지 않습니다. 

솔직히 처음엔 이해가 잘 안 되고 

프로그래밍을 계속 공부하면서 프로그래밍 문법에 익숙해지면 이해가 더 잘 되니까

지금 안 된다고 좌절하지 마시고 나중에 다시 돌아와서 보시는 것도 좋은 방법입니다. 

 

아래 예제를 써 봅시다. 

#include<stdio.h>

void main()
{
	int Num1 = 10; 
	int Num2 = 6;
	printf("%d & %d = %d\n", Num1, Num2, Num1&Num2);
	printf("%d | %d = %d\n", Num1, Num2, Num1|Num2);
	printf("%d ^ %d = %d\n", Num1, Num2, Num1 ^ Num2);
	printf("~Num2 = ~%d \n", ~Num2);
	printf("Num2<<1 = %d\n", Num2<< 1);
	printf("Num2>>1 = %d\n", Num2>> 1);
}

 

 

실행하면 위와 같은 결과값을 볼 수 있습니다. 
왜 이렇게 나오는지 하나씩 그림으로 알아보겠습니다. 

4Byte 크기를 가지는 정수를 Bit로 나타내면 위와 같습니다. 

(int 자료형의 크기는 4Byte입니다.)

컴퓨터에게 10과 6이라는 숫자는 저렇게 생긴 것이죠!

 

여기서 Bit 단위로 비교를 해서 둘 다 참(1)이라면 Bit 단위로 참(1)을 반환하는 것이 & And 연산자입니다. 

& 연산 결과 두번째 Bit만 1이 되었기 때문에 10진수로 바꾸면 2가 됩니다. 

그래서 결과값이 2가 나온 것이죠. 

 

이거만 이해하시면 나머지도 작동 원리가 같기 때문에 쉽습니다. 

 

| Or 연산자는 둘 중 하나라도 참(1)이면 Bit 단위로 참(1)을 반환하는 연산자입니다. 

^ Xor 연산자는 약간 특이하게도 둘 중 하나만 참(1)일 때 Bit 단위로 참(1)을 반환하는 연산자입니다. 

그동안 이모티콘 ^^* 으로만 썼는데 원랜 이런 용도로 쓰던 것이었습니다...

~ Not 연산자는 모든 Bit의 반대값을 반환합니다. 

Bit에서 맨 앞의 값은 양수와 음수를 표현하는 값인데 

양수일 땐 0,

음수일 땐 1 입니다. 

그래서 Bit 단위로 계산을 할 때엔 Bit의 각 자리수에 맞게 10진수로 변환해서 더한 다음 맨 앞의 부호 비트도 더해줍니다. 

지금은 음수라 부호 비트가 1이니까 1도 더해줘서 -7 결과값이 나오는 것입니다. 

쉽게 생각하면 ~ 연산자를 써서 양수를 음수로 바꿀 때엔 1을 더하고 - 붙여주기

음수를 양수로 바꿀 때엔 1을 빼고 - 없애주기

가 됩니다. 

그 다음 Left Shift는 단어 뜻 그대로 Bit 단위로 << 뒤에 쓴 숫자만큼 이동시키는 연산자입니다. 

예제에서는 <<1 이라 써서 한 칸만 이동했습니다. 

<<2 이라 쓰면 왼쪽으로 두 칸 이동합니다. 

Right Shift 또한 마찬가지로 >> 뒤에 쓴 숫자만큼 오른쪽으로 이동합니다. 

그런데 오른쪽 끝까지 이동하면 거기서 Bit가 더 늘어나는 것이 아니고 초과되는 만큼은 없어진다는 점만 알고 넘어가시면 됩니다. 

 


 

이것으로 연산자 파트는 끝이 납니다. 

다음 포스트에서는 드디어 조건문에 대해 알아보겠습니다. 

반응형

'코딩 공부 > C 언어' 카테고리의 다른 글

[C언어 기초] 조건문 if  (0) 2021.10.05
C 언어로 만든 미로찾기 소스  (6) 2021.04.18
C 언어 기초 : 연산자 2  (0) 2021.04.16
C 언어 기초 : 연산자 1  (0) 2021.04.14
C 언어 기초 : scanf 함수 문제 정답  (0) 2021.02.14
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함