티스토리 뷰
2021.04.14 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 1
2021.04.16 - [코딩 공부/C 언어] - C 언어 기초 : 연산자 2
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
- 캐나다
- 그리디
- 컴퓨터공부
- c언어
- 프로그래밍
- 너비우선탐색
- 애플
- 영어공부
- 스위프트플레이그라운드
- 알고리즘
- greedy
- 컴퓨터
- 해커랭크
- 백준
- c++
- 컴퓨터사이언스
- 문제풀이
- BFS
- 코딩공부
- C언어기초
- DFS
- 다이나믹프로그래밍
- 캐나다생활
- dp
- hackerrank
- 프로그래머스
- 아이패드
- 하드웨어
- 기초
- 깊이우선탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |