반응형

비트연산의 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

 

반응형

+ Recent posts