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