>  기사  >  백엔드 개발  >  uint8 상수를 int8로 변환하면 컴파일 오류가 직접 발생하지만 할당 후 변환이 완료되면 작동하는 이유는 무엇입니까?

uint8 상수를 int8로 변환하면 컴파일 오류가 직접 발생하지만 할당 후 변환이 완료되면 작동하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-29 02:05:02675검색

Why does converting a uint8 constant to int8 directly cause a compile error, but it works if the conversion is done after assignment?

Confusion about Converting uint8 to int8

Question:

The following 반면에 다음 코드에서는 형식 변환을 할당 후 연기하면 오류가 발생하지 않습니다.

<code class="go">package main

func main() {
    a := int8(0xfc)  // compile error: constant 252 overflows int8
    _ = a
}</code>

이 두 코드의 차이점은 무엇입니까? 또한 첫 번째 코드가 컴파일 오류가되는 이유는 무엇입니까?

<code class="go">package main

func main() {
    a := 0xfc
    b := int8(a)  // ok
    _ = b
}</code>

Answer:

첫 번째 코드는 int8 형식으로 변환하기 전에 상수 0xfc를 평가합니다. 0xfc는 uint8에 맞는 값이지만 int8에는 맞지 않습니다. 따라서 컴파일러는 "constant 252 overflows int8" 오류를 생성합니다.

제 2 코드에서는, 대입이 행해진 후에 형태 변환이 행해집니다. 이것에 의해, a 는 uint8 형으로서 평가되어 그 후 int8 형으로 변환됩니다. 따라서 오류는 발생하지 않습니다.

결론:

uint8 을 int8 로 변환하는 경우, 변환하기 전에 정수의 값이 int8 의 범위내인 것을 확인할 필요가 있습니다. 그렇지 않으면 컴파일 오류가 발생합니다.

위 내용은 uint8 상수를 int8로 변환하면 컴파일 오류가 직접 발생하지만 할당 후 변환이 완료되면 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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