¿Hay algo especial en el número 65535?

10

2¹⁶-1 y 2⁵ = 2⁵ (o? Obviamente?)

Un desarrollador me preguntó hoy qué es bit a bit 65535 y 32, es decir, 2¹⁶-1 y 2⁵ =? Al principio pensé espontáneamente en 32 pero me pareció fácil con lo que pensé durante varios minutos y luego respondí 32. 32 parece haber sido la respuesta correcta, pero ¿cómo? 65535 = 2¹⁶-1 = 1111111111111111 (pero no parece correcto ya que este número binario todos deberían ser -1 (?)), 32 = 100000 pero no pude convertir eso en mi cabeza con lo que de todos modos respondí 32 ya que tenía para responder algo ¿Es la respuesta 32 de hecho trivial? ¿Es de la misma manera 2¹⁶-1 y 2⁵-1 = 31? ¿Por qué el desarrollador me preguntó exactamente sobre 65535?

Binario lo que me pidieron evaluar fue 1111111111111111 y 100000 pero no entiendo por qué 1111111111111111 no es -1. ¿No debería ser -1? ¿Es 65535 un número que da desbordamiento y cómo lo sé?

Niklas
fuente
3
Debe haber algo especial. Me recuerda a 56 6635, el estándar nacional checo para la cerveza. Hmmmm ... hora de una cerveza.
joshp
55
Hace demasiadas suposiciones: 65535 da -1 solo en aritmética de complemento a dos de 16 bits. Proporciona -0 en aritmética de complemento de 16 bits y 65535 en aritmética de complemento de dos y 32 bits de 32 bits.
Mouviciel
3
Es el límite superior de los puertos TCP.
Renae Lider

Respuestas:

22

El número se trata como un entero sin signo en este caso, lo que significa que todos los bits establecidos no producirán -1 (si estuviera firmado, sí, sería correcto). Entonces, el conjunto de 16 bits le dará 65535.

Curiosamente, sin embargo, el estado firmado no es un factor al hacer operaciones lógicas de bits. Los bits no están firmados, ya que son el componente más bajo de una computadora. Está especificado por la operación de la CPU si los bits en ex. un registro será tratado firmado o no firmado.

Los números negativos se producen al establecer el bit más significativo (MSB) en verdadero SI el número se trata con signo (qué "lado" o qué bit externo se establecerá varía según la arquitectura de la CPU, es decir, big-endian / little-endian )

epistemex
fuente
99
La mayoría de las máquinas modernas se convierten en negativas volteando los bits y agregando el complemento de uno: 2. Solo establecer un bit te da el problema de tener +0 y -0.
James
1
Eso no es necesariamente un problema. El complemento de 1 se trunca hacia cero, independientemente del signo de resultado. El complemento de 2 se trunca hacia -infinito. En ciertas aplicaciones, esto puede meterte en problemas.
John R. Strohm
18

Que es trivial. 65535 en binario son todos, por lo que AND con cualquier X menor que 65535 le dará X.

ggambett
fuente
10

Responde la segunda parte de tu pregunta. Ha etiquetado como así, 65535 de 32 bits se 00000000000000001111111111111111, con o sin signo es no -1.

Chris Kent
fuente