32767 ¿Número mágico?

Imagen de Jorolo
0 puntos

Hola a todos

Lo siguiente más que una consulta es una curiosidad y un reto. El caso es el siguiente:

Consultando documentación sobre configuración de usuarios me tropecé con el siguiente dato: A un usuario se le puede asignar como UID un número entre 0 y 32767. Este tipo de cosa me provocan preguntas del tipo... ¿Por qué 32767 y no 23676 (por ejemplo)? ¿que tiene ese número de especial?

Pero eso no es todo, resulta que cuando tienes diversos archivos o particiones swap puedes seleccionar la prioridad de uso asignándoles un número, sí, un número entre 0 y 32767

Y estas no son las únicas situaciones en las que ese número es un tope infranqueable

Finalmente he descubierto (a grandes rasgos) la causa.

¿En que otras situaciones ese número es un tope?
¿Alguien más sabe la causa?
¿Alguien puede dar una explicación más detallada de la que yo podría dar?

Imagen de juankvillegas
+1
0
-1

Resulta que las capacidades de datos (por ejemplo la RAM) van en potencias de 2... es decir... siempre el doble...

Por eso la ram es 1 Mb (hace mucho), 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 (1Gb), 2Gb, etc, etc, etc...

Si seguimos tenemos... 1024, 2048, 4096, 8192, 16384 y 32768.  Eso si contando empezaramos en 1, pero como empieza en 0 entonces es hasta 32767.

¿Obtuve la mejor respuesta?, ah... verdad que esto no es Yahoo Respuestas. 

+1
0
-1
Imagen de zirconio
+1
0
-1

Hola,

        la respuesta no es que la capacidad de datos se mida en potencias de 2.

Z.
 

çLinux User Reg. #441216

Machine Reg #348016

+1
0
-1

Linux User Reg. #441216

Machine Reg     #348016

Imagen de juankvillegas
+1
0
-1

¿Y si le quitáramos ese pedacito a mi respuesta? 

+1
0
-1
Imagen de Jorolo
+1
0
-1

Hola juankvillegas.

Has aportado una buena... aproximación 

Pero tu respuesta no explica por que 32767 y no 16383 o  8191 pero sí (desde hace poco) 65534 (consultad /etc/passwd)

+1
0
-1
Imagen de gotxa
+1
0
-1

http://en.wikipedia.org/wiki/Integer_(computer_science)

...
16bits, halfword/word
Signed: ?32,768 to +32,767
Unsigned: 0 to +65,535
...

y se explica ahí (en inglés) los pormenores del porqué ese número, problemas, decisiones a tomar, consecuencias, etc.

Vamos, que sí que es un número mágico. 8-O

EDITADO: ahí sólo se explica el razonamiento matemático y computacional del asunto, he flipado un poco o he cerrado la pestaña que no debía |:-/ 

GoTXa
linux counter #116453

+1
0
-1

GoTXa
linux counter #116453
Klaatu barada nikto

Imagen de Jorolo
+1
0
-1

Sí señor, tu respuesta me parece más que buena, pena que el enlace esté en ingles

32767 es el número más grande que se puede almacenar en un bloque de memoria de 16bit (en una escala con numeros positivos y negativos) pero puede llegar a los 65535 si solo representa números positivos

Ahora la pregunta es ¿16bit? ¿Los pc's de hoy en dia no trabajan a 32? (o a 64 los más modernos)

+1
0
-1
Imagen de gotxa
+1
0
-1

pero no tiene nada que ver el número de octetos con los que operan las instrucciones del procesador (4octetos=4bytes=32bits) con la elección de un número entero en un momento dado.

Me explico: tienes que hacer una cosa, para ello debes usar un número entero, y piensas "bueno, ¿dónde pongo el límite?, ¿cuán grande es la estimación máxima de lo que yo quiero representar?"; uno puede pensar , por poner un ejemplo, que con tener 20.000 unidades de algo tiene bastante, pero en lenguaje máquina estás limitado por paquetes de 8bits en 8bits, así que o bien tienes 8 unos y ceros o bien tienes 16 unos y ceros o bien 32 y así en adelante. Para contar 20.000 unidades de lo que sea necesitas 16bits mínimo para contar ese número, pero resulta que 16bits con signo te dan para un poco más que 20.000, y entonces dices "vale, pues un poco más, no voy a limitar mi diseño, dejo que sea hasta el máximo permitido dentro de mi elección". La pregunta puede ser "¿y porqué no utilizo sólo digamos 11 bits para representar mi número?" y la respuesta es "utiliza los que quieras pero tu arquitectura va a desperdiciar los otros 5, tu mismo".

+ ó -

GoTXa
linux counter #116453

+1
0
-1

GoTXa
linux counter #116453
Klaatu barada nikto

Imagen de cousteau
+1
0
-1

La cosa es que en informática el formato más común de números enteros es el tipo "integer", que utiliza 2 bytes (16 bits) y puede ser positivo o negativo, con lo que el rango de números va de -32768 a +32767 (ambos incluidos).

También existen otros tipos, como el "shortint" de 1 byte (-128 a +127) lo cual puede ser demasiado pequeño, o el "longint" de 4 bytes (-2147483648 a 2147483647) que es demasiado grande. Por ejemplo, las tarjetas de sonido antiguas utilizaban sólo 8 bits, pero se cambió a 16 porque con 8 no había calidad suficiente.

Luego además hay tipos enteros que son sólo positivos, como el "byte" (0 a 255) o el "word" (0 a 65535), pero se usan menos.

En resumen, es para redondear.

+1
0
-1

«E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem» significa que dpkg se ha interrumpido y que tienes que ejecutar "sudo dpkg --configure -a" para corregir el problema.