2009-06-15 5 views

Répondre

6

Il les traite comme de petits nombres entiers. Le | l'opérateur fait alors un OU et l'opérateur^fait un XOR (exclusif ou), sur les bits individuels constituant les entiers. Aucune opération n'est particulièrement utile pour la plupart des applications basées sur des caractères, mais elles peuvent être utilisées (par exemple) pour ajouter un bit de parité à un caractère dans la programmation des communications.

+0

Plaisir avec ascii: #define TO_UPPER (ch) (ch) & ~ 0x20 #define TO_LOWER (ch) (ch) | 0x20 – diapir

+1

Ils ne fonctionnent pas. TO_LOWER par exemple transforme le caractère NUL en espace. –

8

Alors que la chaîne a ou la chaîne b ne manque pas de caractères, vérifiez s'ils sont différents.

int p(char *a, char*b) 
{ 
    // While both string a and string b have characters left 
    // note this assumes they are both zero terminated 
    // and if not the same length they have trail zeros 
    while (*a|*b) 
    { 
     // check to see if the character is different 
     // this is done via the xor 
     if (*a^*b) 
       //(...) 
     } 

     // should increment pointers or will never exit the loop 
     // a++; 
     // b++; 
     } 
+0

ok mais ce qui est le résultat exact de * a | b *? fait juste une opération au niveau du bit sur deux nombres binaires qui représentent les caractères? – agnieszka

+0

Espérant, bien sûr, qu'il manque quelques ++ dans le code copié. –

+0

@angieszka: Oui, en effet. –

0

C'est l'opérateur XOR, qui signifie "OU exclusif". Il fonctionne au niveau du bit.

pour chaque bit dans votre article:

0^0 = 0
0^1 = 1
1^0 = 1
1^1 = 0

4

| est le bit OU opérateur. ^ est l'opérateur XOR au niveau du bit:

10101010  11010101 
    | 01010100 ^11111110 
    ========== ========== 
    11111110  00101011 

Alors que char peut être utilisé pour représenter les caractères, il est en soi un type de données entier. Il stocke un nombre binaire (comme tout le reste dans un ordinateur numérique binaire).

0

| = Bitwise OU (inclusie OR)

^= Bitwise XOR (OU exclusif)

0

Ils seront traités comme la représentation binaire. Cela signifie généralement 1 octet non signé. Pas vrai pour toutes les architectures!

(*a|*b) signifie soit *a ou *b ou les deux contiennent rien d'autre que « \ 0 »

(*a^*b) signifie que les deux personnages ne sont pas identiques.

+0

(* a | * b) signifie que les deux ne sont pas égaux à 0, pas à ou. – xian

+0

Non. (* a & * b) signifie que les deux sont différents de zéro. (* a | * b) signifie que l'un ou les deux sont différents de zéro. 0 | 0 == 0, 0 | 1 == 1, 1 | 1 == 1 – dwc

2

Le code signifie simplement:

while (*a != '\0' && *b != '\0') 
    if (*a != *b) 

Le développeur voulait être intelligent en utilisant les opérateurs au niveau du bit

caractères
+0

a et b devraient être * a et * b, et le si est juste * a! = * B, n'incluant pas les comparaisons nulles. – ysth

+0

Vous êtes bien, j'étais confus, merci – albertein