En computación, el signo o asignación (en inglés, signedness) es una propiedad de los tipos de datos que representan números en programas computacionales. Una variable numérica está signada (asignada; en inglés signed) si puede representar tanto números positivos como negativos, y no signada (o desasignada, en inglés unsigned) si únicamente puede representar números no negativos (cero o números positivos).

Ya que los números signados pueden representar valores positivos y negativos, pierden un rango con respecto a los números desasignados del mismo tamaño (en bits), debido a que aproximadamente la mitad de los valores posibles son no positivos, mientras que el respectivo tipo desasignado puede dedicar todos los posibles valores al rango de números positivos.

Por ejemplo, un entero de 16-bit en un complemento a dos signado puede contener los valores -32768 a 32767 inclusive, mientras que un entero de 16-bit no signado puede contener los valores de 0 a 65535. Por este método de representación de signo, el bit más a la izquierda (bit más significante) denota si el valor es positivo o negativo (0 para positivo y 1 para negativo).

En lenguajes de programación

editar

Para la mayoría de las arquitecturas, no existe una distinción del tipo signado o no signado en código máquina. Sin embargo, las instrucciones de aritmética usualmente establecen diferentes flags en el procesador, como la C flag (carry flag) para aritmética no signada y la V flag (overflow flag) para la signada. Estos valores pueden tomarse en cuenta por subsecuentes saltos o comandos aritméticos.

El lenguaje de programación C, junto a sus derivados, dispone de la propiedad de signo para todos los tipos de dato enteros, al igual que para los "caracteres". Para enteros, el modificador unsigned define el tipo como no signado. El tipo predeterminado de un entero es signado, pero puede ser establecida explícitamente con el modificador signed. Por contraste, los estándares de C declaran signed char (carácter signado), unsigned char (carácter no signado), y char (carácter), como tres tipos distintos, pero especifica que los tres deben tener el mismo tamaño y alineación. Además, char debe tener el mismo rango numérico, ya sea signed char o unsigned char, pero la elección de cual depende de la plataforma. Los enteros literales pueden asignarse como no signados con el sufijo U. Por ejemplo, 0xFFFFFFFF devuelve -1, pero 0xFFFFFFFFU devuelve 4,294,967,295 para código de 32-bits.

Los compiladores normalmente muestran una advertencia cuando se hacen comparaciones entre números signados y no signados, o cuando uno es convertido al otro. Estas son operaciones potencialmente problemáticas, ya que los rangos de los tipos signados y no signados son diferentes.

Véase también

editar

Enlaces externos

editar

📚 Artikel Terkait di Wikipedia

VHDL

WrEn='1') then dataInBuf <= dataIn; AddressWrite <= AddrWr; memory(to_integer(unsigned(AddressWrite))) <= dataInbuf; ledcarga <='1'; end if; end process;

Algoritmo de Steinhaus–Johnson–Trotter

args) { int n = Integer.parseInt(args[0]); perm(n); } } C++​ #include <cstdlib> using namespace std; struct Arista{ unsigned o; unsigned d; int peso; LAristas

Autorización de la Autoridad de Certificación

as follows; CAA <flags> <tag> <value> Which translates to; flag: An unsigned integer between 0-255. tag: An ASCII string that represents the identifier

Stdlib.h

quot, rem; } div_t; typedef struct { long int quot, rem; } ldiv_t; itoa (integer to ascii) es una función que normalmente se incluye en muchas implementaciones

C23 (Estándar de C)

enteros wb y uwb para los tipos _BitInt(N) y unsigned _BitInt(N).​ De esta forma, 6u wb produce un unsigned _BitInt(3) y -6 wb produce un signed _BitInt(4)

Cola (informática)

coloca el nodo en la segunda posición }; Nodo* primero; Nodo* ultimo; unsigned int elementos; public: Cola(): primero(0), ultimo(0), elementos(0) {} ~Cola(){

Puntero (informática)

luminoso, uno podría escribir código como el siguiente: #define VID ((unsigned short (*)[80])0xB8000) void foo() { VID[4][1] = 0x1F00 | 'A'; } En muchos

Interfaz de Paso de Mensajes

= (rank + size - 1) % size; /* If we are the "console" process, get a integer from the user to specify how many times we want to go around the ring */