1 octet entier non signé c ++
J'ai programmé une classe appelée HugeInteger qui peut effectuer des calculs arithmétiques (add, sub, se multiplient) avec des numéros de "l'infiniment" taille de. Il traite chaque bit du chiffre dans le nombre comme un stand-alone chiffres (par exemple 1234 = 1, 2, 3 et 4). - Je stocker ces chiffres dans un vecteur (vector<short>)
. Maintenant, parce que chaque chiffre ne peux que prendre les valeurs de 0 à 9, je n'ai pas vraiment besoin de les stocker dans un octet 2 chiffres. Est-il un moyen (sans l'aide de char) pour stocker les chiffres de 1 byte unsigned integer? Merci!
Mise à jour:
vector<unsigned char> v;
v.push_back(1);
v.push_back(2);
for (size_t i = 0; i < v.size(); i++)
cout << v[i];
Ce produit indésirable de sortie. Qui type de données doit-je utiliser pour parcourir le vecteur?
source d'informationauteur raze
Vous devez vous connecter pour publier un commentaire.
Oui, l'utilisation
unsigned char
.Si
<stdint.h>
est disponible, vous pouvez également utiliseruint8_t
.Ne laissez pas la norme compilateur type
char
vous confondre; la suite est parfaitement légal:Ce n'est pas qu'il n'y a rien de spécial à propos de la
char
type qui vous oblige à les considérer comme des personnages; c'est plutôt leur pratique de la taille de 1 byte qui les rend aptes à contenir des valeurs que les routines de la bibliothèque commeprintf
les utiliser pour organiser les valeurs 1 octet qu'il interprétera comme les personnages sous un adapté à l'encodage.uint_least8_t
est le plus compact de type de données pour stocker une seule décimale.Si votre système prend en charge un type de données de taille 1 octet, ce sera elle. Sinon, il sera le prochain plus petit type de données disponibles.
Vous pouvez avoir besoin de convertir la valeur lors de l'utilisation d'un flux d'insertion à l'opérateur de faire en sorte que vous obtenez de sortie numérique à la place du personnage de traitement.
La sortie que vous voyez de l'utilisation de cout << sur un unsigned char est en bas de la mécanique de la << opérateur lorsqu'il est utilisé avec un std::ostream (en particulier, les différentes surcharges de l'opérateur << affiche la valeur de différentes façons - le char/unsigned char surcharges généralement supposer que vous voulez une représentation de caractère au lieu d'un numérique)
La représentation sous-jacente de votre unsigned char est toujours le même numéro qui vous a poussé dans le vecteur - un unsigned char est toujours un entier non signé (1 octet entier)
Si vous souhaitez modifier la sortie, vous devez éviter d'utiliser la surcharge de la << opérateur qui est conçu pour un char ou unsigned char - la meilleure façon de le faire est d'effectuer un cast
À l'aide de char ou unsigned char que 1 octet type integer est pas toujours simple... Parfois, vous avez juste besoin de type de type de numéro, pas de type de caractère. Un exemple est ici: 1 octet type de données integer
Les autres, c'est quand vous avez la fonction surchargée pour les arguments de plusieurs types différents.