he visto estos mencionados en el contexto de C y C++, pero ¿cuál es la diferencia entre las variables con y sin signo?¿Cuál es la diferencia entre las variables firmadas y las no firmadas?
Respuesta
las variables firmados, tales como enteros con signo se permitirá representar números tanto en los rangos positivos y negativos.
las variables sin signo, tales como enteros sin signo, se sólo le permiten representar números positivos en el.
las variables sin firmar y firmados del mismo tipo (tales como int
y byte
) ambos tienen el mismo rango (rango de 65.536 y 256 números, respectivamente), pero sin signo pueden representar un número magnitud mayor que el correspondiente firmado variable de .
Por ejemplo, un unsigned byte
puede representar valores 0
-255
, mientras signed byte
puede representar -128
a 127
.
página de Wikipedia sobre Signed number representations explica la diferencia en la representación a nivel de bits, y la página Integer (computer science) proporciona una tabla de rangos para cada tipo entero con signo/sin signo.
Los números positivos son mayores que cero. Los números firmados, al menos en C, pueden usar un bit de signo en lugar de una representación de complemento, por lo que no tienen el mismo rango que los no firmados debido a que se repite +/- cero. Si dice que un int es de 16 bits, diga la plataforma; la mayoría de los sistemas modernos son de 32 o 64 bits. –
Las variables con signo utilizan un bit para marcar si son positivas o negativas. Las variables sin firmar no tienen este bit, por lo que pueden almacenar números más grandes en el mismo espacio, pero solo números no negativos, p. 0 y más.
Para más: Unsigned and Signed Integers
Las variables sin firmar solo pueden ser números positivos, porque carecen de la capacidad de indicar que son negativos.
Esta capacidad se denomina 'signo' o 'bit de firma'.
Un efecto secundario es que sin un bit de firma, tienen un bit más que se puede usar para representar el número, duplicando el número máximo que puede representar.
Las variables con signo pueden ser 0, positivas o negativas.
Las variables sin signo pueden ser 0 o positivas.
Las variables sin firmar se utilizan a veces porque se pueden usar más bits para representar el valor real. Te da un rango más grande. También puede asegurarse de que no se pase un valor negativo a su función, por ejemplo.
variables desin firmar son las variables que están representados el interior sin un signo matemático (más o menos) puede almacenar 'cero' o valores positivos sólo. Digamos la variable sin signo es n bits de en tamaño, entonces se puede representar valores de 2^n (2) de potencia n - 0 a (2^n-1). Una variable con signo, por otro lado, 'pierde' un bit para representar el signo, por lo que puede almacenar valores desde - (2^(n-1) -1) hasta (2^(n-1)) incluyendo cero.Por lo tanto, una variable con signo puede almacenar valores positivos, valores negativos y cero.
PS:
Internamente, el signo matemático puede ser representado en la propia forma de complemento, forma de complemento a dos o con un bit de signo (por ejemplo: 0 -> +, 1-> -)
Todos estos métodos efectivamente divide el rango de valores representables en n bits (2^n) en tres partes, positivo, negativo y cero.
Esto es sólo mi valor de dos centavos.
Espero que esto ayude.
sin signo se utiliza cuando ur valor debe ser positivo, no tiene valor negativo aquí, si firmó para el rango de -32768 a +32767 int si no firmado para el rango de 0 a 65535 int
Mientras que comúnmente se conoce como un " bit de signo ', los valores binarios que solemos usar no tienen un bit de signo verdadero.
La mayoría de las computadoras usan aritmética de dos complementos.Los números negativos se crean mediante la adopción de la one's-complemento (voltear todos los bits) y la adición de uno:
5 (decimal) -> 00000101 (binary)
1's complement: 11111010
add 1: 11111011 which is 'FB' in hex
Esta es la razón por un byte con signo contiene valores -128 a 127 en lugar de -127 a 127:
1 0 0 0 0 0 0 0 = -128
1 0 0 0 0 0 0 1 = -127
- - -
1 1 1 1 1 1 1 0 = -2
1 1 1 1 1 1 1 1 = -1
0 0 0 0 0 0 0 0 = 0
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 1 0 = 2
- - -
0 1 1 1 1 1 1 0 = 126
0 1 1 1 1 1 1 1 = 127
(añadir de 1 a 127 da :)
1 0 0 0 0 0 0 0
que vemos en la parte superior de esta tabla es -128.
Si tuviéramos un bit de signo apropiado, el rango de valores sería el mismo (por ejemplo, -127 a +127) porque un bit está reservado para el signo. Si el más significativo bit es el bit de signo, tendríamos:
5 (decimal) -> 00000101 (binary)
-5 (decimal) -> 10000101 (binary)
Lo interesante en este caso es que tenemos tanto un cero como un cero negativo:
0 (decimal) -> 00000000 (binary)
-0 (decimal) -> 10000000 (binary)
No tenemos -0 con complemento a dos; lo que sería -0 es -128 (o para ser más general, uno más que el valor positivo más grande). Sin embargo, lo hacemos con el complemento; todos los bits 1 es negativo 0.
Matemáticamente, -0 es igual a 0. Recuerdo vagamente un equipo en el -0 < 0, pero no puedo encontrar ninguna referencia a ella ahora.
¡Muchas gracias! Estaba realmente confundido por qué es -128 a 127 para un byte firmado y no -127 a 127. ¡Esta respuesta necesita más votos! –
Puede que esta no sea la definición exacta pero le daré un ejemplo: Si creara un número aleatorio tomándolo de la hora del sistema, aquí usar la variable sin signo es beneficioso ya que hay un amplio margen para el azar los números como números con signo dan números positivos y negativos. Como el tiempo del sistema no puede ser negativo, utilizamos una variable sin signo (solo números positivos) y tenemos un mayor rango de números aleatorios.
- 1. Aclaraciones sobre las instrucciones de carga y firma firmadas/no firmadas (MIPS)
- 2. ¿Qué son las cookies firmadas y por qué son útiles?
- 3. ¿Hay conflicto entre las políticas de depósito y las URL firmadas?
- 4. ¿Qué son las cookies "firmadas" en connect/expressjs?
- 5. PHP -cuál es la diferencia entre las variables globales y las constantes
- 6. Cookies de sesión firmadas. ¿Una buena idea?
- 7. Cuál es la diferencia entre las funciones VarIsEmpty y VarIsEmptyParam
- 8. Crear URL firmadas para CloudFront con Ruby
- 9. ¿cuál es la diferencia entre las tareas AntCall y Ant?
- 10. cuál es la diferencia entre las plantillas y el polimorfismo
- 11. ¿Cuál es la diferencia entre las variables de enlace y la variable que ingreso usando &&?
- 12. Cuál es la diferencia entre $ (...) y `...`
- 13. ¿Cuál es la diferencia entre las variables de entorno `USER` y` USERNAME`?
- 14. ¿Cuál es la diferencia entre los punteros y las variables globales en C?
- 15. ¿cuál es la diferencia entre las variables locales y de instancia en Java
- 16. ¿Cuál es la diferencia entre% TMP% y% TEMP% en las variables de entorno de Vista?
- 17. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 18. Cuál es la diferencia entre las licencias de código abierto
- 19. ¿Cuál es la diferencia entre las ediciones de Orientdb?
- 20. ¿Cuál es la diferencia entre .ToString (+) y ""
- 21. ¿Cuál es la diferencia entre las interfaces IComparable e IEquatable?
- 22. ¿Cuál es la diferencia entre dict() y {}?
- 23. ¿Cuál es la diferencia entre las referencias de proyecto y las dependencias de proyecto?
- 24. ¿Cuál es la diferencia entre las fuentes TrueType y las fuentes Type-1?
- 25. ¿Cuál es la diferencia entre las aplicaciones basadas en ventanas y las aplicaciones basadas en vista?
- 26. Cuál es la diferencia entre las promociones enteras y las conversiones enteras en C++
- 27. ¿cuál es la diferencia entre las API síncronas y las API asíncronas?
- 28. En caso de que las bibliotecas de código abierto estén firmadas digitalmente
- 29. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 30. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
Pensé que asumimos en la programación por defecto y no cuando está etiquetado no relacionado con la programación? –
Yo también. Encontré muchas preguntas bajo programación. ¿Me pregunto porque? – batbrat
La pregunta se refiere a un aspecto específico de la programación en general. – Sam152