Signo Extend 9-Bit en C

Muhammad Zeeshan 12 octubre 2023
  1. ¿Qué es Sign Extend?
  2. Signo Extender un entero de 9 bits en C
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:

  1. La memoria se divide en 1 byte por cada carácter del tipo char.
  2. La estructura de memoria de tipo int consta de 4 bytes.
  3. 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
  1. El res representa el resultado, mientras que X e Y 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.

  2. 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 valor 0b0000000111111111 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.

  3. 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
  1. res es la salida, y X e Y 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 operador OR bit a bit para insertar 1 en el bit más a la izquierda del resultado.

  2. 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;
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

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

Artículo relacionado - C Bit