코드를 작성할 때 데이터 유형을 변환해야 하는 경우가 많습니다. 이러한 변환은 일반적으로 문자열을 정수 또는 부동 소수점 숫자로 변환하거나 정수를 문자열로 변환하는 등 다양한 데이터 유형 간에 수행됩니다. Golang에서는 정수 변환이 특히 중요합니다. 이번 글에서는 Golang에서 정수 변환을 수행하는 방법과 관련 주의사항을 소개합니다.
Golang은 다양한 크기의 정수 유형 간 변환을 지원합니다. 예를 들어 uint8을 int8로 변환하고 int64를 uint8로 변환할 수 있습니다. 다만, 타입 변환은 대상 타입의 표현 범위가 변환된 값의 값 범위를 완전히 포함할 수 있는 경우에만 수행될 수 있다는 점에 유의해야 한다.
예를 들어 int16(32767)의 최대값을 int8로 변환하면 데이터 오버플로가 발생하여 결과가 음수가 될 수 있습니다. 마찬가지로, 부동 소수점 숫자 리터럴 123.45(float64 유형으로 해석됨)를 uint16으로 변환하면 소수 부분이 손실되고 잘린 정수 값을 얻습니다.
다음은 Golang에서 정수 변환을 수행하는 방법을 보여주는 몇 가지 예입니다.
package main import ( "fmt" "math" ) func main() { // 将int转换为float a := 10 b := float64(a) fmt.Printf("a=%d, b=%f\n", a, b) // 将float转换为int c := 3.14159 d := int(c) fmt.Printf("c=%f, d=%d\n", c, d) // 将uint64转换为int32 const maxUint64 = math.MaxUint64 var e uint64 = maxUint64 f := int32(e) fmt.Printf("e=%d, f=%d\n", e, f) // 将int8转换为uint8 var g int8 = -12 h := uint8(g) fmt.Printf("g=%d, h=%d\n", g, h) }
위의 예에서는 int 유형의 변수 a를 float64로 변환하고 float64 유형의 변수 c를 int 유형으로 각각 변환합니다. 변수 e를 int32로 입력하고 int8 유형 변수 g를 uint8로 변환합니다. 각각의 경우에 초기 값과 변환된 결과를 인쇄했습니다. 부호 없는 정수 유형(예: uint8, uint16 등)의 범위를 부호 있는 유형으로 변환하기 전에 신중하게 고려해야 합니다. 원래 값이 대상 유형의 양수 표현 범위를 초과하면 결과는 음수가 됩니다.
명시적 변환 외에도 Golang은 암시적 정수 변환도 제공합니다. 어떤 경우에는 암시적 변환을 수행하면 코드가 더 깔끔해질 수 있지만 다른 경우에는 주의가 필요합니다.
예를 들어, 덧셈, 뺄셈, 곱셈 또는 왼쪽 시프트 연산을 위해 부호 있는 정수 유형(예: int8)의 변수와 다수의 부호 없는 정수 유형(예: uint8)을 사용하는 경우 후자는 동일한 부호 있는 정수 유형으로 변환됩니다. 변수는 전자의 기호 유형입니다. 이 변환을 통해 코드를 더 읽기 쉽게 만들고 오버플로도 방지할 수 있습니다. 그러나 다른 연산자를 사용할 때는 변환 명령을 명시적으로 발행해야 합니다.
Golang에는 정수 변환에 대한 "암시적 규칙"이 있습니다. 예를 들어, 연산자를 사용하여 서로 다른 크기의 두 정수 유형을 더하거나 빼는 경우 Golang은 자동으로 이를 동일한 유형으로 변환하고 필요한 경우 부호 확장합니다. 그러나 정수 유형을 다른 유형의 변수(예: 문자열 또는 인터페이스 유형)에 할당하는 경우 필요한 유형으로 명시적으로 변환해야 합니다.
요약:
위 내용은 Golang에서 정수 변환을 수행하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!