Toute la profondeur


Entiers peuvent être signées ou non signé, la valeur par défaut est signé. Les deux sont stockés en utilisant un nombre fixe de bits qui est généralement un multiple de huit (par exemple, 8, 16, 32, ou 64). Si la signature de nombre entier, l'un de ces bits indique si la valeur est positive ou négative, ce qui laisse un peu moins disponibles pour la taille. Ainsi, la gamme de dimensions qui peut être représentée à l'aide entier non signé qui est deux fois une signature. Entier non signé est utile lorsque les valeurs des variables contenant les données ne sont jamais devraient être negative.Bit modèle d'un ensemble ne précise pas si l'entier est signé ou non. Tout dépend de la façon dont le modèle est interprété. Par exemple, si motif de huit bits 10100111 est interprété comme un entier signé, sa valeur est (complément à 2) -89, et si elle est interprétée comme un unsigned alors sa valeur 167. matériel utilisé pour l'addition et la soustraction de tout signés et non signés est identique et le matériel utilisé pour la comparaison, multiplication et division est différente pour les entiers signés et non signés. En tant que programmeur C, nous ne vous inquiétez pas sur la façon de gérer cette situation, il est de la responsabilité du compilateur d'utiliser l'instruction appropriée en fonction du type de variable.

Représentation Entier:


Dans le monde numérique, les données sont représentées dans le matériel sous forme binaire. Dans le cas de nombre entier non signé, tous les bits de données représentant des entités de données. Pour représenter un entier signé, bit le plus significatif est utilisé pour indiquer le signe. Deux méthodes peuvent être utilisées pour représenter des entiers signés; Inscrivez-plus de magnitude approche et complimentapproach 2.
Dans l'approche signe de magnitude, le bit le plus significatif contient des informations et signe bits restants détiennent taille. Cette approche complique effectivement la conception de l'unité arithmétique. Largement approche utilisée est un complément de 2; dans cette approche, le bit le plus significatif indique le signe. Pour les nombres entiers positifs stocke le bit de signe le plus significatif et les bits restants jusqu'à la magnitude du magasin et entiers négatifs, complètent même ordre de grandeur du nombre entier positif 2 représente la valeur. Ici beauté du complément de deux, ce est que, inverse le bit le plus significatif. Voir le tableau ci-dessous:




Le complément à l'approche 2, on ne peut pas changer le signe d'un certain nombre, en inversant simplement le bit le plus significatif. Entier signé est interprétée avant de regarder son bit de signe; Si elle est nulle, alors il est tout simplement traitée comme un nombre non signé et si ce est une alors la valeur doit être négative. Après la figure illustrent l'interprétation de l'entier de base signé le bit de signe.

Complément et le matériel de la complexité de 2:

motif de Bit Integer est manipulé pendant les opérations arithmétiques. Comme ces modèles sont affectés aux valeurs qui représentent a un grand effet sur la complexité du matériel. Par exemple, le signe plus et l'amplitude de la représentation de la 2 du complément, à la fois pour déterminer si un nombre est positif ou négatif simplement en regardant dans le bit le plus significatif. Mais ça ne serait pas bien si motif assigné aux valeurs de sorte que le même matériel peut être utilisé pour effectuer une arithmétique entière indépendamment de l'opérande été signé ou non? Ce est exactement ce que la représentation du complément à deux est destiné à faire? Par exemple, supposons que nous devions ajouter deux virgule unsigned 09h03 avec 4 bits additionneur. Les opérandes équivalent binaire 1001 et 0011 seront utilisées pour l'opération. Le résultat de l'opération est correcte décimal 12, et le matériel qui effectue l'addition est conçu pour produire le résultat équivalent binaire 1100. Mais que faire si les deux entiers sont interprétés comme un entier signé. Selon la représentation dans les opérandes de complément à deux serait -7 à 3, et le résultat produit par le matériel serait interprété comme -4 qui est correct. Ainsi, le même matériel peut être utilisé pour des entiers signés et non signés. Additionneur même matériel est également utilisé pour la soustraction en tant que chaque soustraction est une addition ayant au moins un opérande négatif. Par exemple (3.7) peut être calculé comme (+ 7 (-3)).

Gamme et trop-plein:

Il existe différents modèles de 2ⁿ bits 0 et 1, qui peuvent être utilisés pour représenter les valeurs d'un entier n bits. Lorsque l'ensemble est non signés valeurs possibles sont les valeurs dans la plage de 0 à (2ⁿ - 1). Lorsque la totalité de la moitié de la signature de la gamme est utilisée pour représenter les valeurs et les moyens non négatifs est pour les valeurs négatives. Moyenne 2ⁿ est 2 (n-1), de sorte que le champ ne est pas négatif couvercles de 0 à (2 (n-1) - 1) et couvre la plage négative de -1 à -2 (n-1). Ainsi, l'ensemble des valeurs de nombre entier est de -2 (n-1) à (2 (n-1) - 1) Toute opération arithmétique qui produit une valeur supérieure à la limite supérieure de la plage des causes de type de données que le dépassement de la valeur. Par exemple l'addition de 20 8 bits entier non signé 270 250 résultats, mais au-dessus de la limite supérieure (256) du nombre entier. Dans ce cas, après le fonctionnement du bit de débordement est simplement ignoré et le poids du trop-plein (270-256 = 14) est stocké dans le résultat. Voir l'exemple ci-dessous:

Débordement dans le type de données entier se produit dans le silence. Il n'y a pas des contrôles d'exécution devraient, il est de la responsabilité de tous les programmeurs d'anticiper gamme possible de valeurs et de choisir un type de taille suffisante de données pour éviter tout débordement.

Types de données entières:


C offre une vaste ensemble de types de données entières. Les mots-clés sont essentiels pour les entiers int et l'omble. signé, non signé, court, long, et sont utilisés comme modificateur. Si un ou plusieurs modificateurs sont utilisés dans la déclaration, le mot réservé int compris et peut être omis. Si vous utilisez le modificateur ni signé ni signé, signé est utilisé par défaut.

Taille d'entiers et de la dépendance sur le matériel:

La taille de l'entier est déterminé par le compilateur, qui ne devrait pas avoir quelque chose à voir avec le matériel réel (même si elle ne en général); en fait, des compilateurs différents sur la même machine peuvent avoir des valeurs différentes pour le programme these.AC taille d'impression et la gamme des nombres entiers est la suivante:

#include #define RANGE (type, nom) \ {\ tapez min = 0, max = 0, bit = 0; \ bit unsigned int = 0; \ char * le format; \ \ / * Taille mesure type de données en bits */\ bit = 1; \ bit = 1; \ tout (bits << = 1) bit ++; \ \ / * Avec ou sans signe */\ if ((type) (1L <0) \ {\ format = "% lu";/* Unsigned */\ min = 0; \ } \ Un autre \ {\ format = "% ld";/* * Signé/\ = min (type) (1L << (bit - 1)); \ } \ \ Min max = - 1;/* * Retournement arrière/\ printf ("% s, bits% u: Golf", le nom, les bits); \ printf (format, (long) min); \ printf ("a"); \ printf (format, (long) max); \ printf ("\ n"); \ } int main () { GAMME (char, "char"); RANGE (int signé ", signé int"); RANGE (unsigned long, "unsigned long"); / * GAMME Appel macro pour imprimer la taille et la portée de tout type integer * / return 0; }

Exercice écrire un programme C pour vérifier si les entiers sont représentés dans signe de magnitude, complément ou une forme de complément de deux.

(0)
(0)

Commentaires - 0

Sans commentaires

Ajouter un commentaire

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caractères restants: 3000
captcha