>  기사  >  백엔드 개발  >  Go에서 부호 있는 정수의 이진 표현을 인쇄할 때 fmt.Printf가 \"-101\"을 출력하는 이유는 무엇입니까?

Go에서 부호 있는 정수의 이진 표현을 인쇄할 때 fmt.Printf가 \"-101\"을 출력하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 07:28:29264검색

Why Does fmt.Printf Output

2의 보수와 fmt.Printf의 수수께끼 같은 출력

컴퓨터 과학 영역에서 2의 보수는 표현에 널리 사용되는 방법입니다. 내부적으로 부호 있는 정수. 이 표현에는 비트를 뒤집고 1을 추가하여 음수를 표현하는 작업이 포함됩니다. 예를 들어, 2의 보수에서 -5는 "1111 1011"(^5 1과 동일)과 같은 이진 형식으로 표시됩니다.

fmt.Printf를 사용하여 부호 있는 정수의 이진 표현을 인쇄하려고 하면 혼란이 발생합니다. . 다음 코드 조각을 고려해보세요.

예상대로 이 코드는 -5의 2의 보수 표현인 "1111 1011"을 출력해야 합니다. 그러나 실제 출력은 "-101"로, 이러한 기대와는 다릅니다. 이는 다음과 같은 질문을 제기합니다: 값이 2의 보수 형식으로 내부적으로 저장되어 있습니까, 아니면 다른 표현이 사용됩니까?

흥미롭게도 값을 인쇄하기 전에 부호 없는 정수로 변환하면 원하는 결과가 나옵니다.

이 결과는 2의 보수 표현인 "11111011"이 출력됩니다. -5.

불일치의 핵심은 fmt.Printf가 이진수 형식을 처리하는 방식에 있습니다. fmt.integer 함수를 자세히 살펴보면 형식 지정 프로세스 중에 부호 있는 음의 정수가 양의 정수로 변환된다는 사실이 분명해집니다.

이 변환에는 '-' 접두사를 추가해야 합니다. 앞서 관찰한 "-101" 출력을 설명하는 형식화된 문자열입니다.

본질적으로 값의 내부 표현은 2의 보수 규칙을 따르는 반면, fmt.integer의 형식 지정 프로세스는 부호 있는 음의 정수를 양의 정수로 변환하여 예상치 못한 결과를 낳습니다.

위 내용은 Go에서 부호 있는 정수의 이진 표현을 인쇄할 때 fmt.Printf가 \"-101\"을 출력하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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