Signer étendre 9 bits en C

Muhammad Zeeshan 12 octobre 2023
  1. Qu’est-ce que l’extension de signe
  2. Signer étendre un entier 9 bits en C
Signer étendre 9 bits en C

Nous allons apprendre à étendre la signature d’un entier 9 bits en C dans ce tutoriel. Tout d’abord, nous devons savoir exactement quelle est l’extension du signe.

Qu’est-ce que l’extension de signe

L’extension de signe fait référence à l’extension d’un nombre tout en conservant son bit de signe, par exemple en passant de 32 bits à 64 bits. Le bit de signe est toujours le plus élevé dans les formes numériques utilisées aujourd’hui.

Ce n’est qu’une question de tradition, mais à notre connaissance, c’est toujours le cas. Cela indique que nous devons déplacer la partie du nombre le plus critique vers la nouvelle place la plus élevée tout en maintenant l’intégrité des autres parties du nombre.

Signer étendre un entier 9 bits en C

Certains opérateurs au niveau du bit du langage de programmation C fonctionnent au niveau matériel. Cependant, pour utiliser ces opérateurs, il est nécessaire de comprendre l’architecture de la mémoire et comment C enregistre les données dans la mémoire.

Structure:

  1. La mémoire est divisée en 1 octet pour chaque caractère de type char.
  2. La structure mémoire d’un type int est constituée de 4 octets.
  3. Un emplacement mémoire de type short est composé de 2 octets.

Les informations concernant le panneau se trouvent dans la partie la plus à gauche. Le chiffre 1 indique un nombre négatif, tandis que le chiffre 0 représente un nombre positif.

Regardons l’exemple suivant pour mieux comprendre ce qui est discuté.

Pour commencer, dans la classe main(), nous allons créer une variable de type short et lui donner le nom val. Nous affecterons ensuite la variable de la même manière que ci-dessous.

short val = 234;

Après cela, nous fournirons la valeur short que nous avons créée avec un nombre de 9 bits à la variable appelée res.

int res = val & 0b0000000111111111;

Une vérification if est appliquée. Cela vérifie si le bit de signe, qui est le bit le plus élevé que vous conservez (0x100), est défini, et si c’est le cas, il met tous les bits qui le suivent.

if (val & 0x100) {
  res = res | 0xFE00;
}

Explication:

Nous avons fait une variable val, un petit entier de 16 bits en mémoire. L’opérateur & a ensuite été utilisé pour masquer les 9 bits les plus récents.

Il s’agit de l’opérateur AND utilisé dans les opérations au niveau du bit, et son processus est décrit ci-dessous.

X   Y   res
0   0   0
0   1   0
1   0   0
1   1   1
  1. Le res représente le résultat, tandis que X et Y représentent les nombreuses options de saisie. Le calcul se fait petit à petit.

    Il ne produira un 1 que si les deux bits avec la même valeur significative sont 1.

  2. Par conséquent, nous pouvons séparer les 9 derniers bits de la valeur de l’opérateur AND au niveau du bit, et le reste des bits sera mis à 0. La valeur 0b0000000111111111 correspond à la représentation binaire.

    Cela démontre que seuls les 9 bits les plus récents contiennent 1, tandis que le reste contient un 0. La variable res sera mise à jour avec le résultat.

  3. Après cela, nous avons utilisé une vérification if pour vérifier le premier bit. Si c’était 1, nous l’avons ajouté au résultat. Sinon, nous l’avons laissé à 0.

Pour cela, nous avons de nouveau utilisé l’opérateur bit à bit AND et, cette fois, nous n’avons extrait que le premier bit, et si la réponse est 1, nous avons alors utilisé le | , qui est l’opérateur OR au niveau du bit et fonctionne comme suit.

X   Y   res
0   0   0
0   1   1
1   0   1
1   1   1
  1. Le res est la sortie, et X et Y sont les possibilités d’entrée. Il est calculé au fur et à mesure.

    Il ne sort 0 que si le même bit significatif est 0. Dans l’instruction if, le résultat de cet opérateur est évalué.

    Si true, l’opérateur “OU” au niveau du bit est utilisé pour insérer 1 dans le bit le plus à gauche du résultat.

  2. 0xFE00 est la représentation hexadécimale du nombre binaire, et il est utilisé pour définir les bits au-dessus s’il y a un bit de signe présent.

En utilisant l’opérateur au niveau du bit en C, nous pouvons effectuer une variété d’autres choses. Il y a beaucoup plus d’opérateurs au niveau du bit en C que “ET” au niveau du bit et “OU” au niveau du bit.

Il y a XOR au niveau du bit représenté par un symbole ^. Le symbole ~ représente un opérateur NON au niveau du bit.

Le signe >> désigne un opérateur de décalage vers la gauche. Vous pouvez effectuer le décalage vers la droite en utilisant le symbole <<.

Vous pouvez faire cela ou tout autre travail souhaité de différentes manières avec l’aide de ces opérateurs.

Code source complet :

#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