>백엔드 개발 >Golang >Go에서 상수를 사용하여 uint8을 int8로 변환하는 데 실패하는 이유는 무엇입니까?

Go에서 상수를 사용하여 uint8을 int8로 변환하는 데 실패하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-31 06:48:01321검색

Why Does Converting uint8 to int8 with a Constant Fail in Go?

uint8을 int8로 변환할 때의 혼란

uint8(부호 없는 8비트 정수)을 int8(부호 있는 8비트 정수)로 변환하는 경우 ), 결과가 항상 예상과 같지 않을 수도 있습니다. 이 문서에서는 다음 두 접근 방식의 차이점을 살펴보고 첫 번째 접근 방식에서 컴파일 오류가 발생하는 이유를 설명합니다.

<code class="go">a := int8(0xfc) // compile error
// deferring type conversion
a := 0xfc
b := int8(a) </code>

코드 간의 차이점

두 코드는 작업 순서에 있습니다.

  • 첫 번째 예에서는 유형 변환(int8(0xfc))이 할당 전에 발생하는 반면, 두 번째 예에서는 할당(a := 0xfc)이 발생합니다. )는 유형 변환(int8(a)) 이전에 발생합니다.

첫 번째 코드의 컴파일 오류

첫 번째 코드는 상수가 0xfc가 int8 유형의 범위를 초과합니다. int8은 -128에서 127 사이의 값을 나타낼 수 있는 반면, 0xfc는 십진수로 252로 이 범위를 초과합니다. Go 언어 사양에 따르면 상수 표현식은 항상 상수 유형의 값으로 정확하게 표현 가능해야 합니다.

합법적인 상수 표현식과 불법적인 상수 표현식

https://를 참조하세요. golang.org/ref/spec#Constant_expressions에서 합법적인 상수 표현식과 불법적인 상수 표현식에 대한 자세한 설명을 확인하세요. https://blog.golang.org/constants의 블로그 게시물은 정수 유형의 제한 사항과 오류 포착을 위한 유형 검사 상수의 중요성에 대한 추가적인 통찰력을 제공합니다.

변환 문제 해결

부호를 고려하면서 바이트(uint8)를 int32로 변환하는 것이 목표라면 먼저 int8로 변환한 다음 int32로 변환하는 것이 좋습니다.

<code class="go">var b byte = 0xff
i32 := int32(int8(b)) // -1</code>

위 내용은 Go에서 상수를 사용하여 uint8을 int8로 변환하는 데 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.