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é?
Respuestas:
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 )
fuente
Que es trivial. 65535 en binario son todos, por lo que AND con cualquier X menor que 65535 le dará X.
fuente
Responde la segunda parte de tu pregunta. Ha etiquetado como de 32 bits así, 65535 de 32 bits se
00000000000000001111111111111111
, con o sin signo es no -1.fuente