[Go 언어] 22. 쉬프트 연산은 비트 단위로 자리를 이동합니다.

안녕하세요. 언제나 휴일, 언휴예요.

이번 게시글에서는 Go 언어의 쉬프트 연산을 살펴보아요. Go 언어의 쉬프트 연산에는 좌측 쉬프트(<<), 우측 쉬프트(>>)를 제공합니다.

쉬프트 연산은 좌항에 정수 형식이 올 수 있고 우항에는 부호없는 정수 형식이 올 수 있어요.

좌측 쉬프트 연산은 좌항의 값을 우항의 값만큼 비트 자리 이동을 합니다. 예를 들어 3을 왼쪽으로 4자리 이동하면 연산 결과는 48이예요. 십진수 3은 이진수로 11이며 4자리 왼쪽으로 이동하면 이진수 110000, 즉 48이예요.

좌측으로 1자리 이동하면 곱하기 2를 수행한 연산 결과가 같아요. 따라서 좌측으로 n자리 이동하면 2의 n승을 곱한 결과와 같습니다.

우측 쉬프트 연산은 좌측 쉬프트 연산과 역으로 생각하세요. 우측으로 1자리 이동하면 나누기 2를 수행한 연산 결과와 같아요. 따라서 우측으로 n자리 이동하면 2의 n승으로 나눈 결과와 같습니다.

새 프로젝트를 생성하여 논리 연산 표현을 사용해 보아요.

[그림 1] LiteIDE에서 새 프로젝트 생성 및 소스 파일 추가
// Example 쉬프트 연산
package main
 
import "fmt"
 
func main() {
    fmt.Println("3<<4 =", 3<<4) //3X16
    fmt.Println("48>>4 =", 48>>4) //48/16
   
    fmt.Println("-3<<4 =", -3<<4) //-3X16
    fmt.Println("-48>>4 =", -48>>4)//-48/16
}

앞에서 설명했던 비트 연산을 확인하는 코드를 작성하세요.

    fmt.Println("3<<4 =", 3<<4) //3X16
    fmt.Println("48>>4 =", 48>>4) //48/16
   
    fmt.Println("-3<<4 =", -3<<4) //-3X16
    fmt.Println("-48>>4 =", -48>>4)//-48/16

출력 결과는 다음과 같아요.

3<<4 = 48
48>>4 = 3
-3<<4 = -48
-48>>4 = -3
[그림 2] 쉬프트 연산 예제 실행 화면