Go 및 C에서 64비트 정수 -1의 16진수 표현 이해
Go 및 C에서는 %x 형식을 사용합니다. 16진수 표기법으로 정수를 인쇄합니다. 그러나 음의 64비트 정수 -1에 적용하면 발산이 발생합니다.
Go에서 %x는 음수 값을 유지하여 "-1"을 표시하는 반면 C는 "ffffffffffffffff"를 출력합니다. 이러한 차이는 Go의 엄격한 유형 처리에서 비롯됩니다.
Go에서 -1의 16진수 표현을 부호 없는 정수로 인쇄하려면 명시적인 변환이 필요합니다. 이를 단위로 변환하면 값이 부호 없는 유형으로 해석됩니다.
fmt.Printf("%d %x %d %x", i, i, uint(i), uint(i))
이 결과는 다음과 같습니다.
-1 -1 4294967295 ffffffff
두 번째 16진수 값("ffffffffff")은 부호 없는 정수로 처리될 때 -1의 2의 보수입니다.
이 동작의 근거는 다음과 같습니다. Rob Pike가 설명하는 방법은 음수를 압축된 형식으로 인쇄하는 기능을 유지하는 것입니다. %x 형식이 항상 인수를 부호 없는 것으로 처리하는 경우 음수 값을 표시하는 간단한 방법은 없습니다.
위 내용은 Go와 C에서 `%x` 형식이 -1에 대해 다른 16진수 표현을 출력하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!