숫자 65535에 특별한 것이 있습니까?


11

2¹⁶-1 & 2⁵ = 2⁵ (또는 분명히?)

개발자가 오늘 비트 단위 65535 & 32, 즉 2¹⁶-1 & 2⁵ =? 나는 처음에 자발적으로 32로 생각했지만 몇 분 동안 생각한 다음 32로 대답하는 것이 쉬워 보였습니다. 32는 정답이지만 어떻게 보입니까? 65535 = 2¹⁶-1 = 1111111111111111 (그러나이 이진수이기 때문에 모든 것이 -1 (?)이어야 함), 32 = 100000이지만 32에서 100000까지 변환 할 수 없었습니다. 뭔가를 대답합니다. 대답 32는 사실 사소한 것입니까? 같은 방법으로 2¹⁶-1 & 2⁵-1 = 31입니까? 개발자가 왜 정확히 65535에 대해 물어 보았습니까?

이진으로 평가를 요청한 것은 1111111111111111 & 100000이지만 1111111111111111이 -1이 아닌 이유를 이해할 수 없습니다. -1이 아니어야합니까? 65535는 오버플로를 발생시키는 숫자이며 어떻게 알 수 있습니까?


3
특별한 것이 있어야합니다. 체코의 맥주 표준 인 56 6635를 생각 나게합니다. 흠 ... 맥주를위한 시간.
joshp

5
가정은 너무 많습니다. 65535는 16 비트 2의 보수 산술에서만 -1을 제공합니다. 16 비트 1의 보수 산술에서 -0을, 32 비트 2의 보수 및 1의 보수 산술에서 65535를 제공합니다.
mouviciel

3
TCP 포트의 상한입니다.
Renae Lider

답변:


23

이 경우 숫자는 부호없는 정수 로 취급됩니다. 이는 모든 비트 세트가 -1을 생성하지 않음을 의미합니다 (서명 된 경우 예이면 정확함). 따라서 16 비트가 모두 설정되면 65535가됩니다.

흥미롭게도 논리 비트 연산을 수행 할 때는 부호있는 상태가 중요하지 않습니다. 비트는 컴퓨터에서 가장 낮은 구성 요소이므로 서명되지 않습니다. ex에 비트가 있으면 CPU 연산에 의해 지정됩니다. 레지스터는 서명되거나 서명되지 않은 것으로 취급됩니다.

숫자가 부호있는 것으로 처리되면 ( "측면"또는 외부 비트가 설정 될 경우) 빅 아키텍처 / 리틀 엔디안과 같이 CPU 아키텍처에 따라 달라지는 경우 음수는 최상위 비트 (MSB)를 true로 설정하여 생성됩니다. )


9
대부분의 최신 기계는 비트를 뒤집고 1을 보충하여 음수로 변환합니다. 한 비트 만 설정하면 +0 및 -0 문제가 발생합니다.
James

1
반드시 문제는 아닙니다. 1의 보수는 결과 부호에 상관없이 0으로 잘립니다. 2의 보수는-무한으로 잘립니다. 특정 응용 프로그램에서는 문제가 발생할 수 있습니다.
John R. Strohm

18

그것은 이다 사소한. 이진수 65535는 모두 1이므로 65535보다 작은 X로 AND를하면 X가됩니다.


10

질문의 두 번째 부분에 답하십시오. 태그를따라서 32 비트의 65535는 00000000000000001111111111111111부호가 있거나 부호가 없는 -1 이 아닙니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.