본문 바로가기
코딩/C언어

#6 C언어 비트 시프트 연산 알아보기

by zz! 2023. 12. 17.
728x90

안녕하세요. 오늘은 C언어 비트 시프트 연산에 대해 포스팅을 해보겠습니다. 비트 시프트 연산은 이진수의 비트를 왼쪽이나 오른쪽으로 이동시키는 기능을 제공합니다. 오늘 포스팅을 통해 어떤 경우에 사용되며, 어떻게 활용되는지 살펴보겠습니다.

 

#6 C언어 비트 시프트 연산 알아보기 썸네일

 

목차

1. 비트 시프트 연산의 기본 개념

2. 왼쪽 시프트 연산 ( ' << ' )

3. 오른쪽 시프트 연산 ( ' >> ' )

4. 비트 시프트 연산 활용

 

1. 비트 시프트 연산의 기본 개념

컴퓨터에서 데이터는 이진수로 표현합니다. 비트 시프트 연산은 변수의 비트를 특정 방향으로 이동시킴으로써 변수의 값을 변화시킵니다. C언어에서는 주로 두 가지 종류의 비트 시프트 연산이 사용됩니다. 

왼쪽 시프트 ( ' << ' ) 

오른쪽 시프트 ( ' >> ' )

 

2. 왼쪽 시프트 연산 ( ' << ' )

왼쪽 시프트 연산은 변수의 모든 비트를 왼쪽으로 이동시킵니다. 이때 비어 있는 오른쪽 부분은 0으로 채워집니다.

#include <stdio.h>

int main() {
    int x = 5;
    int result = x << 2; // x를 2만큼 왼쪽으로 시프트
    printf("%d\n", result);
    return 0;
}

 

x를 2만큼 왼쪽으로 시프트를 해보겠습니다.

"x"의 이진수는 "00000101" 입니다.

0 0 0 0 0 1 0 1

1. 변수의 모든 비트를 왼쪽으로 이동시킵니다.

0 0 0 0 1 0 1  

2. 이때 비어 있는 오른쪽 부분은 0으로 채워집니다.

0 0 0 0 1 0 1 0

3.  코드에서는 "x를 2만큼 왼쪽으로 시프트" 입니다. 

0 0 0 1 0 1 0 0

2진수 "00010100"의 10진수는 "20"입니다. 

그래서 위에 코드를 실행하면 "20" 이 출력이 됩니다.

 

3. 오른쪽 시프트 연산 ( ' >> ' )

오른쪽 시프트 연산은 변수의 모든 비트를 오른쪽으로 이동시킵니다. 이때 부호 있는 정수의 경우, 왼쪽에는 부호 비트(0 또는 1)로 채워집니다.

#include <stdio.h>

int main() {
    int x = -8;
    int result = x >> 2; // x를 2만큼 오른쪽으로 시프트
    printf("%d\n", result);
    return 0;
}

 

x를 2만큼 오른쪽으로 시프트를 해보겠습니다.

"x"의 이진수는 "-00001000" 입니다.

0 0 0 0 1 0 0 0

1. 변수의 모든 비트를 오른쪽으로 이동시킵니다.

  0 0 0 0 1 0 0

2. 이때 비어 있는 왼쪽 부분은 0으로 채워집니다.

0 0 0 0 0 1 0 0

3.  코드에서는 "x를 2만큼 오른쪽으로 시프트" 입니다. 

0 0 0 0 0 0 1 0

2진수 "-00000010"의 10진수는 "2"입니다. 

그래서 위에 코드를 실행하면 "2" 이 출력이 됩니다.

 

4. 비트 시프트 연산 활용

4.1 비트 시프트 연산 활용

비트 시프트 연산의 성능 향상 : 비트 시프트 연산은 곱셈 또는 나눗셈 연산을 대체할 수 있습니다. 특히 2의 거듭제곱과 관련된 연산에서 성능 향상을 가져올 수 있습니다. 

ex) "x * 2" 는 "x << 1" 로 대체할 수 있고, "x / 2"는 "x >>1"로 대체할 수 있습니다.

int x = 10;
x = x << 1; // x를 2배로 증가시킴

 

관련 포스팅

 

#5 C언어 산술 연산자 기초 수학을 코드로 풀어보기

안녕하세요. 오늘은 C언어에서 사용되는 산술 연산자에 대해 포스팅을 해보겠습니다. C언어는 기본적인 수학적 연산을 수행하기 위한 다양한 산술 연산자를 제공합니다. 기초적인 코드 예제를

wsul.tistory.com

 

아스키 코드 개념과 아스키 코드표, 아스키 코드 변환 사이트 추천!

이번 포스팅에서는 아스키 코드의 개념과 아스키 코드표에 대해 알아보고, 광고 없이 사용하기 위해 제가 직접 만든 아스키 코드 변환 사이트를 추천드리겠습니다. 목차 1. 아스키 코드란? 2. 아

wsul.tistory.com

 

오늘은 비트 시프트 연산에 대해 포스팅을 해보았습니다. 여러분들에게 도움이 되는 "부상남"이 되겠습니다.

728x90