2008-11-02 10 views
1

en C++ j'ai deux caractères maintenir des valeurs hexagonales .: par exempleChar qui détient des valeurs hexagonales C++

char t = 0x4; 
char q = 0x4; 

Comment aurait-je comparer si les deux valeurs détenues dans le charbon sont les mêmes ?? J'ai essayé

if (t == q) // should give me true 

mais non, aucune aide, merci!

+0

Attendez, quelque chose ne va pas ici. Cela devrait, et exécute si branche du conditionnel. Nous avons besoin de plus de contexte. Votre réponse "a & b" n'est pas correcte - ce sera "vrai" pour tous les bits qui se chevauchent dans la représentation de a et b –

+0

Cela devrait fonctionner. Pourquoi pensez-vous que non? –

Répondre

-8

Ah, je trouve la solution:

if (t & q) 
+0

Cela devrait être if (t && q) Votre instruction, (t & q), effectue une comparaison par bit. Certes, cela peut être ce que vous voulez. – dwj

+0

En tout cas, ce n'est pas ce qu'il a demandé. Si t et q sont initialisés comme présenté, alors t == q donne certainement vrai - au moins avec mon compilateur. –

+0

Cela fonctionne pour toutes les valeurs Excepté: t = q = 0. –

11

un produit de carbonisation est juste un nombre entier de 8 bits. Peu importe si vous l'avez initialisé avec un littéral hexadécimal ou décimal, dans les deux cas, la valeur du caractère sera la même après.

Alors:

char t = 0x4; 
char q = 0x4; 
if(t == q) 
{ 
//They are the same 
} 

Il est équivalent à:

char t = 4; 
char q = 4; 
if(t == q) 
{ 
//They are the same 
} 

Vous avez mentionné que ce qui précède n'est pas vrai, mais vous devez avoir une erreur dans votre code ou t et q ne doit pas être le même.

Ce que vous suggérez ...

si (t == q) // doit me donner le vrai mais non, aucune aide, merci!

n'est pas correct. Pourquoi?

t & q fait une opération de bits comparer, retournant une valeur où les deux bits sont alignés 1.

Le terme « si (t & q) » retournerait vrai tant que l'un des bits de t et q sont communs.

donc si t = 3 qui est en binaire 00000011 et q = 1 qui est en binaire 00000001 alors (t & q) retournera vrai même sachant qu'ils ne sont pas égaux.