Bonjour.
Plusieurs choses:
- Merci d'utiliser les balises de code quand tu postes un code (je te les ai ajouté).
- Évite les "using namespace", voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
Ton souci se situe à deux endroits:
- Il faut utiliser & et non && (même si dans ce cas précis, ça ne changeait rien, je t'invite à rechercher la différence subtile entre ces deux opérateurs). Ça n'aurait pas fonctionné pour la "vraie" méthode ci-dessous, puisque tu n'aurais pas vérifié les bits un à un, mais simplement si les deux nombres était différents de 0...
- Il ne faut pas toujours comparer le (même) bit le plus faible (celui le plus à droite), mais le bit de la droite vers la gauche. C'est ça qu'il te manque.
Pour décaler un bit vers la gauche, on utilise l'opérateur "<<".
Ex:
10010 & (1 << 0), ce qui équivaut à 10010 & 00001 => 0
10010 & (1 << 1), ce qui équivaut à 10010 & 00010 => 1
10010 & (1 << 2), ce qui équivaut à 10010 & 00100 => 0
10010 & (1 << 3), ce qui équivaut à 10010 & 01000 => 0
10010 & (1 << 4), ce qui équivaut à 10010 & 10000 => 1
Tu peux donc utiliser la formule "m_v & (1 << i) == 1".
Toi tu faisais toujours: "10010 & 1" ce qui fait que tu avais tout le temps 0 ou tout le temps 1.
Ensuite, j'ai amélioré ton code en utilisant un string buffer. On évite de concaténer des string avec +, c'est assez inefficace, et ça prend plus de mémoire que prévu. On préfère utiliser un std::ostringstream pour cela.
Enfin, tu peux aussi utiliser une classe C++ pour faire ce travail pour toi: std::bitset.
Voici les méthodes ici:
#include <iostream>
#include <sstream>
#include <bitset>
std::string getBinaryFormat(char c)
{
return std::bitset<8>(c).to_string();
}
std::string get(char m_v)
{
std::ostringstream buff;
for (int i = 7; i >= 0; --i)
buff << ((m_v & (1 << i)) ? "1" : "0");
return buff.str();
}
int main()
{
std::cout << getBinaryFormat('a') << std::endl
<< get('a') << std::endl;
return 0;
}
Améliorer votre expérience CodeS-SourceS avec ce plugin:
ttp://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature