> 백엔드 개발 > Golang > Go와 C에서 `%x` 형식이 -1에 대해 다른 16진수 표현을 출력하는 이유는 무엇입니까?

Go와 C에서 `%x` 형식이 -1에 대해 다른 16진수 표현을 출력하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-19 12:07:03
원래의
679명이 탐색했습니다.

Why Does `%x` Formatting Output Different Hexadecimal Representations for -1 in Go and C?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿