3
votes

Bits de type primitif en C

Eh bien, je commence mes études C et je me suis retrouvé avec la question suivante, comment les bits des types primitifs sont-ils remplis, par exemple, le type int, par exemple, a 4 octets, soit 32 bits , qui peut contenir jusqu'à 4294967296. Mais si, par exemple, j'utilise une valeur qui ne prend qu'un octet, comment les autres bits restent-ils?

    #include <stdio.h>

    int main(void) {

        int x = 5; // 101 how the rest of the bits are filled
                   // which was not used?
         return 0;
    }

c bit

2 commentaires

Comment rempliriez-vous un entier sans changer sa valeur? Pensez-y.


@FeiXiang En théorie, les entiers signés en C peuvent contenir des bits de remplissage, dans le cas de formats de nombres exotiques (compl 1, magnitude signée). Mais ce scénario ne vaut même pas la peine d'être étudié, car les ordinateurs du monde réel utilisent le complément de 2.


3 Réponses :


0
votes

Tous les bits de début seront mis à 0 , sinon la valeur ne serait pas 5 . Un peu, dans les ordinateurs d'aujourd'hui, n'a que deux états, donc si ce n'est pas 0 alors c'est 1 qui entraînerait une différence entre la valeur stockée. Donc, en supposant 32 bits, vous avez ce

5 == 0b00000000 00000000 00000000 00000101
5 == 0x00000005


3 commentaires

Merci, je pensais que ce serait comme ça, mais je doutais que les bits soient remplis à gauche ou à droite. Autre chose, sortant un peu de la portée, quelle serait l'utilité réelle du bitwise?


Si je ne me trompe pas, votre doute sur le "remplissage à gauche ou à droite" dépend de l'endianité du système. Les opérations au niveau du bit peuvent être utilisées pour définir des indicateurs binaires, du moins c'est ainsi que je les vois être utilisés.


@ThuYeinTun les bits sont toujours remplis à la partie la plus significative. Tout comme en décimal, nous pouvons écrire 0000123 pour un nombre à 7 chiffres. Si nous écrivons des zéros sur la droite, comment pouvons-nous faire la différence entre 123000 (qui est 123) et 123000 (qui est le vrai 123000)? En C, nous traitons des valeurs , pas de la façon dont la valeur est stockée en mémoire, ce qui est de quoi endianness



0
votes

Les bits restants sont stockés avec 0.

int a = 356;

Maintenant, convertissons-le en binaire.

         00000000 00000000 00000001 01100100

Vous obtenez maintenant un nombre de 9 bits. Puisque int alloue 32 bits, remplissez les 23 bits restants avec 0.

La valeur stockée en mémoire est

 1     0    1     1     0   0   1   0   0


1 commentaires

J'ai fini par accepter la réponse de l'ami ci-dessus, car il a répondu en premier, mais merci aussi pour votre réponse.



0
votes

Le type que vous avez choisi détermine la taille de l'entier, et non la valeur que vous stockez dans la variable.

Si nous supposons que int est de 32 bits sur votre système, alors la valeur 5 sera exprimée sous la forme d'un nombre de 32 bits. Ce qui est 0000000000000000000000000101 binaire ou 0x00000005 hex. Si les autres bits avaient d'autres valeurs, ce ne serait plus le nombre 5, 32 bits de large.


0 commentaires