Red de conocimientos sobre prescripción popular - Colección de remedios caseros - ¿Por qué el rango de valores enteros con signo en lenguaje C es de -32768 a 32767?

¿Por qué el rango de valores enteros con signo en lenguaje C es de -32768 a 32767?

Esta es una declaración obsoleta que sólo se encuentra en libros más antiguos.

Para enteros con signo, es decir, de tipo int, está relacionado con la longitud de la palabra del compilador. Solo en compiladores de 16 bits, el tipo int ocupa 2 bytes y su rango de representación es -32768 ~ 32767; para compiladores de 32 y 64 bits, el tipo int ocupa 4 bytes y su rango de representación es -2147483648 ~ 2147483647; .

Tome un compilador de 16 bits como ejemplo para presentar su principio, que es similar a los compiladores de 32 y 64 bits.

Int es un entero con signo que ocupa 2 bytes y 16 bits en un compilador de 16 bits.

Para los números con signo, cuando se representan en una computadora, el bit más alto es el bit de signo. Cuando el bit de signo es 0, es positivo y cuando el bit de signo es 1, es negativo.

Entonces, la parte que realmente representa el valor son los 15 bits restantes, que es el rango de 11111111165438.

Convertir a decimal, es decir, 0~32767.

Entonces el rango de números positivos es 1~32767.

Hay un valor especial, que es el valor de 0. Cuando los bits de signo son 1 y 0, el valor es 0, por lo que es un desperdicio representar el mismo número en dos formas. Cuando el bit de signo es 1, -32768 está representado solo por ceros, razón por la cual el rango de números negativos es 1 más que el de los números positivos.

En resumen, para cualquier bit, ya sea de tipo entero de 8 bits, 16 bits, 32 bits o incluso 64 bits, la fórmula de cálculo es:

Si el número total de números es n, entonces el rango de números con signo es

-2^(n-1)~ 2^(n-1)-1

El rango de números sin signo es:

p>

0~2^n-1

En esta fórmula, 0 representa potencia. 2 n es 2 elevado a la enésima potencia.