[Go 언어] 6. 표현 범위에 따라 원하는 정수 형식 사용

안녕하세요. 언제나 휴일입니다. 이전 게시글에게 변수 선언하는 방법을 간단히 알아보았죠.

이번 게시글에서는 정수 형식에 관해 다룰 거예요.

Go 언어는 표현 범위에 따라 1바이트에서 8바이트까지의 정수 형식을 사용할 수 있어요.

자료형바이트자료형바이트
uint81바이트int81바이트
uint162바이트int162바이트
uint324바이트int324바이트
uint648바이트int648바이트
uintn비트 시스템에서 n비트intn비트 시스템에서 n비트

정수 형식은 음의 정수를 표현하지 않는 uint 계열과 음의 정수도 표현하는 int 계열이 있어요. 정수 형식은 1바이트, 2바이트, 4바이트, 8바이트가 있습니다. 그리고 시스템에 따라 크기를 결정하는 uint와 int 형식이 있어요. uint와 int 형식은 32비트 시스템에서는 4바이트(32비트), 64비트 시스템에서는 8바이트(64비트)입니다.

간단하게 정수 형식의 크기를 코드로 알아보기로 해요.

먼저 LiteIDE를 실행하세요. 그리고 File 메뉴에서 New를 선택한 후에 “New Project or File” 창에서 “Browse…” 버튼을 눌러 새로운 폴더를 하나 생성하세요.

[그림 1] 새로운 프로젝트 생성 및 소스 파일 추가
// Example 변수의 크기 확인
package main
 
import "fmt"
import "unsafe" //Sizeof를 사용하기 위해
 
func main() {
    var i1 int8
    fmt.Println(unsafe.Sizeof(i1))
    var i2 int16
    fmt.Println(unsafe.Sizeof(i2))
    var i3 int32
    fmt.Println(unsafe.Sizeof(i3))
    var i4 int64
    fmt.Println(unsafe.Sizeof(i4))
}

Go 에서는 변수 크기를 확인하기 위해 “unsafe” 패키기의 Sizeof를 이용합니다.

var i1 int8
fmt.Println(unsafe.Sizeof(i1))
[그림 2] 변수 크기 실행 화면

 그리고 프로그래밍할 때 정수를 8진수나 16진수로 표현할 때도 많이 있어요. 메모리의 값은 이진 데이터 형태이므로 2진수로 나타내는데 자리수를 줄이기 위해 8진수나 16진수로 표현하기도 하죠. 특히 1바이트가 8비트여서 16진수 표현은 자주 사용합니다. 16진수 1자리로 4비트의 값을 표현할 수 있어서 16진수 2자리로 1바이트의 값을 표현할 수 있어요.

Go 언어에서 숫자 앞에 0(숫자 영)을 붙이면 8진수 표현이고 0x(숫자 0과 알파벳 x)를 붙이면 16진수 표현이예요.

이번에는 다양한 정수 형식으로 표현할 수 있는 최댓값과 최솟값을 확인하는 코드를 작성해 보아요.

[그림 3] 새로운 프로젝트 생성 및 소스 파일 추가

 uint8 형식은 1바이트이므로 0에서 0xFF까지 표현할 수 있어요. uint16은 0에서 0xFFFF까지 표현할 수 있어요. 그리고 int8은 -80에서 0x7까지 표현할 수 있어요. 이를 이용하여 다음처럼 코드를 작성하면 정수 형식의 표현 범위의 최솟값과 최댓값을 확인할 수 있어요.

//Example 정수 형식 표현 범위의 최솟값과 최댓값 확인
package main
 
import "fmt"
 
func main() {
    fmt.Println("int8 최솟값:", -0x80, "최댓값:", 0x7F)
    fmt.Println("int16 최솟값:", 0x8000, "최댓값:", 0x7FFF)
    fmt.Println("int32 최솟값:", 0x80000000, "최댓값:", 0x7FFFFFFF)
    fmt.Println("int64 최솟값:", -0x8000000000000000, "최댓값:", 0x7FFFFFFFFFFFFFFF)
}
[그림 4] 정수 형식의 표현 범위의 최솟값과 최댓값 확인