> 백엔드 개발 > Golang > uint64를 int64로 변환하면 -1이 발생하는 이유는 무엇입니까?

uint64를 int64로 변환하면 -1이 발생하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-30 11:00:03
원래의
217명이 탐색했습니다.

 Why Does Converting a uint64 to an int64 Result in -1?

정보 보존을 통해 uint64를 int64로 변환

프로그래밍 영역에서는 데이터 유형을 정확하게 처리하는 것이 중요합니다. 다음 코드를 고려해보세요.

<code class="go">var x uint64 = 18446744073709551615
var y int64 = int64(x)</code>
로그인 후 복사

실행 시 y 값은 -1이 됩니다. 이는 원래 숫자에서 중요한 비트가 잘린 것처럼 보이기 때문에 당황스러운 결과입니다. 이 문제를 해결하려면 이 변환의 의미를 자세히 살펴보겠습니다.

비트 값 보존

예상과는 달리 int64(x)를 통한 변환은 모든 비트를 보존합니다. int64 범위를 벗어나는 선행 64비트를 포함하여 x에서. 이는 y와 x가 이진 표현에서 동일한 비트 패턴을 공유한다는 것을 의미합니다.

uint64(18446744073709551615) = 0xFFFFFFFFFFFFFFFF
int64(-1) = 0xFFFFFFFFFFFFFFFF
로그인 후 복사

따라서 y의 값은 -1로 표시되지만 uint64 대응인 x와 수학적으로 동일합니다.

명확성을 위한 예

설명을 위해 약간 다른 숫자를 고려해 보겠습니다.

<code class="go">var x uint64 = 18446744073709551615 - 3</code>
로그인 후 복사

이 경우 y = -4이므로 변환 시 손실된 비트는 적절하게 유지됩니다. 이진수:

1111111111111111111111111111111111111111111111111111111111111100 (x)
-100 (y)
로그인 후 복사

변환은 단순히 선행 63비트를 음수의 크기로 해석하고 그에 따라 부호 비트를 설정합니다. 이를 통해 특정 범위 내에서 uint64와 int64 사이의 무손실 변환이 가능하며 난수 생성기에 중요한 통계 속성이 유지됩니다.

위 내용은 uint64를 int64로 변환하면 -1이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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