C언어 \ C++
[C언어] 비트연산자 Shift 예제 (<<, >> 한 비트씩 움직이기)
안산드레아스
2022. 1. 9. 16:52
반응형
비트연산의 Shift는 비트를 우측, 좌측으로 이동시켜주는 연산자이다.
아래 예시를 보면 쉽게 이해할 수 있다.
예를들어 0001 을 << 연산하면 좌측으로 1칸 이동하는 것이고, >> 연산하면 우측으로 이동시키는 것이다.
<좌측으로 Shift 연산>
#include<stdio.h>
#include<string.h>
int main()
{
int num = 15; // 00000000 00000000 00000000 00001111
int result1 = num << 1; // 00000000 00000000 00000000 00011110
int result2 = num << 2; // 00000000 00000000 00000000 00111100
int result3 = num << 3; // 00000000 00000000 00000000 01111000
printf("왼쪽으로 1칸 이동 : %d\n", result1);
printf("왼쪽으로 2칸 이동 : %d\n", result2);
printf("왼쪽으로 3칸 이동 : %d\n", result3);
return 0;
}
반응형
<우측으로 Shift 연산>
#include<stdio.h>
#include<string.h>
int main()
{
int num = 15; // 00000000 00000000 00000000 00001111
int result1 = num >> 1; // 00000000 00000000 00000000 00000111
int result2 = num >> 2; // 00000000 00000000 00000000 00000011
int result3 = num >> 3; // 00000000 00000000 00000000 00000001
printf("오른쪽으로 1칸 이동 : %d\n", result1);
printf("오른쪽으로 2칸 이동 : %d\n", result2);
printf("오른쪽으로 3칸 이동 : %d\n", result3);
return 0;
}
* 주의사항 *
">>" 연산자는 일반적으로 안쓰는 것이 좋다. (호환성이 부족, 다만 CPU의 호환성 여부를 알고 있다면 사용가능)
연산자는 CPU따라 다른데, MSB(가장 왼쪽 끝 비트)에 0을 채울수도 있고, 1을 채울 수도 있다. 대부분의 인텔 CPU는 아래와 같은 결과를 얻을 수 있지만, AMD CPU는 다른결과를 얻을 수 있다.
간혹 일부 CPU는 >> 연산시 0을 가져오는 CPU들도 있다.
11110000 >> 1 했을 때, 결과로
01111000 이 나올 수 있다. (양수)
이 점을 잘 유의해야 한다.
비트연산자 AND, OR, XOR, NOT 에 대해서는 아래 참고
https://ansan-survivor.tistory.com/1173
[C언어] C언어 비트연산자 AND, OR, NOR, NOT 예제 코드
비트연산의 기초 연산자 4개 예제 코드 32비트 PC는 아래와 같이 총 비트 갯수가 32개이다. 비트 연산을 해서 결과값을 int형으로 확인 AND연산 (둘다 1이어야 1을 반환) 0 & 0 0반환 0 & 1 0반환 1 & 0 0반
ansan-survivor.tistory.com
반응형