uint8을 int8로 변환할 때의 혼란
uint8(부호 없는 8비트 정수)을 int8(부호 있는 8비트 정수)로 변환하는 경우 ), 결과가 항상 예상과 같지 않을 수도 있습니다. 이 문서에서는 다음 두 접근 방식의 차이점을 살펴보고 첫 번째 접근 방식에서 컴파일 오류가 발생하는 이유를 설명합니다.
<code class="go">a := int8(0xfc) // compile error // deferring type conversion a := 0xfc b := int8(a) </code>
코드 간의 차이점
두 코드는 작업 순서에 있습니다.
첫 번째 코드의 컴파일 오류
첫 번째 코드는 상수가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!