Signo Extend 9-Bit en C
Aprenderemos cómo firmar extender un entero de 9 bits en C en este tutorial. En primer lugar, tenemos que saber qué es exactamente la extensión del signo.
¿Qué es Sign Extend?
La extensión de signo se refiere a expandir un número manteniendo su bit de signo, por ejemplo, pasando de 32 bits a 64 bits. El bit de signo es siempre el más alto en las formas numéricas que se utilizan en la actualidad.
Esto es solo una cuestión de tradición, pero hasta donde sabemos, siempre es así. Esto indica que necesitamos mover la porción del número más crítico al nuevo lugar más alto mientras mantenemos la integridad de las otras partes del número.
Signo Extender un entero de 9 bits en C
Algunos operadores bit a bit en el lenguaje de programación C operan a nivel de hardware. Sin embargo, para utilizar estos operadores, es necesario comprender la arquitectura de la memoria y cómo C guarda los datos en la memoria.
Estructura:
- La memoria se divide en 1 byte por cada carácter del tipo
char
. - La estructura de memoria de tipo
int
consta de 4 bytes. - Una ubicación de memoria de tipo
short
consta de 2 bytes.
La información sobre el letrero se puede encontrar en la parte más a la izquierda. El número 1 indica un número negativo, mientras que el número 0 representa un número positivo.
Veamos el siguiente ejemplo para comprender mejor lo que se está discutiendo.
Para empezar, en la clase main()
, crearemos una variable de tipo short
y le daremos el nombre val
. Luego asignaremos la variable de la misma manera que se muestra a continuación.
short val = 234;
Después de eso, proporcionaremos el valor short
que hicimos junto con un número de 9 bits a la variable llamada res
.
int res = val & 0b0000000111111111;
Se aplica una verificación if
. Esto comprueba si el bit de signo, que es el bit más alto que estás manteniendo (0x100)
, está activado, y si lo está, pone todos los bits que le siguen.
if (val & 0x100) {
res = res | 0xFE00;
}
Explicación:
Hicimos una variable val
, un pequeño entero con 16 bits en la memoria. A continuación, se utilizó el operador &
para enmascarar los 9 bits más recientes.
Es el operador AND
que se utiliza en las operaciones bit a bit, y su proceso es el que se describe a continuación.
X Y res
0 0 0
0 1 0
1 0 0
1 1 1
-
El
res
representa el resultado, mientras queX
eY
representan las muchas opciones de entrada. El cálculo se hace poco a poco.Solo producirá un 1 si ambos bits con el mismo valor significativo son 1.
-
Por lo tanto, podemos separar los 9 bits finales del valor del operador
Y
bit a bit, y el resto de los bits se pondrá a 0. El valor0b0000000111111111
corresponde a la representación binaria.Esto demuestra que solo los 9 bits más recientes contienen 1, mientras que el resto contiene un 0. La variable
res
se actualizará con el resultado. -
Después de eso, usamos una comprobación de
if
para verificar el primer bit. Si era 1, lo sumamos al resultado. De lo contrario, lo dejamos en 0.
Para ello, usamos nuevamente el operador bit a bit AND
y, esta vez, extrajimos solo el primer bit, y si la respuesta es 1, usamos el |
operador, que es el operador bit a bit OR
y funciona de la siguiente manera.
X Y res
0 0 0
0 1 1
1 0 1
1 1 1
-
res
es la salida, yX
eY
son las posibilidades de entrada. Se calcula poco a poco.Solo da como resultado 0 si el mismo bit significativo es 0. En la sentencia
if
, se evalúa el resultado de este operador.Si es
true
, se utiliza el operadorOR
bit a bit para insertar 1 en el bit más a la izquierda del resultado. -
0xFE00
es la representación hexadecimal del número binario, y se utiliza para establecer los bits encima si hay un bit de signo presente.
Al utilizar el operador bit a bit en C, podemos realizar una variedad de otras cosas. Hay muchos más operadores bit a bit en C que bit a bit AND
y bit a bit OR
.
Hay un XOR
bit a bit representado como un símbolo ^
. El símbolo ~
representa un operador NOT
bit a bit.
El signo >>
denota un operador de desplazamiento a la izquierda. Puede hacer el cambio a la derecha usando el símbolo <<
.
Puede realizar este o cualquier otro trabajo que desee de diversas maneras con la ayuda de estos operadores.
Código fuente completo:
#include <stdio.h>
int main() {
short val = 234;
int res = val & 0b0000000111111111;
if (val & 0x100) {
res = res | 0xFE00;
}
return 0;
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn