Comment lire un nombre binaire en entrée?
Est-il un moyen pour l'utilisateur de saisir un nombre binaire en C ou C++?
Si nous écrire quelque chose comme
int a = 0b1010;
std::cout << a << std::endl
Alors la sortie vient d'être 10 (lors de l'utilisation du compilateur approprié extensions).
mais quand on essaie d'écrire
int n;
std::cin >> n;
int t = 0bn;
Il nous donne une erreur si quelqu'un peut suggérer que comment peut-on passer directement à la lecture de nombre binaire en entrée plutôt qu'à l'aide de la chaîne pour stocker les entrées?
- de recherche de google, la première entrée: cplusplus.com/forum/general/103479
- C'est ce que je pense que la question est en fait à propos. C'est dommage qu'ils n'ont pas un
bin
IO manipulateur pour aller avechex
etdec
etoct
. Peut-être que je vais essayer d'en proposer maintenant que le binaire littéraux sont une chose standard.
Vous devez vous connecter pour publier un commentaire.
Il y a un peu de confusion ici, nous allons démêler un peu.
0b1010
est un littéral entier, une constante, au moment de la compilation valeur de nombre entier écrit en base 2. De même,0xA
est un littéral en base 16 et10
est en base 10. Tous ces reportez-vous à la même entier, c'est juste une façon différente de dire au compilateur dont le numéro que vous voulez dire. Au moment de l'exécution, dans la mémoire, cet entier est toujours représenté comme nombre de base 2.std::cout << a
; prend la valeur entière dea
et les sorties d'une représentation de chaîne d'elle. Par défaut, il les sorties en base 10, mais vous pouvez je.e à utiliser lestd::hex
modificateur de l'avoir sortie en base 16. Il n'est pas prédéfini modificateur d'imprimer en binaire. Si vous avez besoin de le faire sur votre propre (ou google, c'est une question commune).0b
enfin, est seulement utilisé pour définir les littéraux entiers. Il est pas à l'exécution de l'opérateur. Rappel, tous lesint
s sont représentés en base 2 des nombres dans la mémoire. D'autres bases n'existent pas à partir d'une machine point de vue,int
estint
, donc il n'y a rien à convertir. Si vous avez besoin de lire un nombre binaire à partir d'une chaîne, vous roulez l'inverse de code pour ce que vous faites pour l'imprimer (std::cin >> n
suppose que l'entrée est une base de 10, de façon à ce qu'il lit un numéro erroné si l'entrée est en fait destiné à être en base 2).unsigned
types d'entiers sont en fait la base 2, avec des bits à la place normale de la valeur de l'ordre: ils enveloppement au modulo 2^n pour n où n est le nombre de bits dans la représentation de la valeur de la taille de l'entier (N4140 section 3.9.1 types Fondamentaux, point 4). Etunsigned char
a pas de rembourrage: tous les objets de bits de la valeur de la représentation bits. (Et vous pouvez lancer àchar*
de regarder la représentation de quoi que ce soit). Trinary matériel aurait pour émuler... Les bits dans l'ordre req vient de la description des changements de la réalité du décalage de bits, pas*2
Alors qu'il n'y a pas de fonction pour lire des nombres binaires directement, il y a des fonctions,
strtox
(où x représente le type de données) pour convertir une chaîne de caractères contenant un nombre binaire (ou un certain nombre de toute autre base) à une valeur numérique.La solution est donc d'abord lire le numéro de chaîne, puis de le convertir.
Exemple:
plutôt le faire vous-même: