2013-02-13 4 views
2

Pourquoi est-ce négatif? Et comment puis-je rendre la valeur de retour positive?Hash renvoie une valeur négative

KeyInput: ABCD123

for(int a=0; a<keyInput.length(); a++){ 
     key = ((key << 5)+key)^keyInput[a]; 
    } 

return key; 
+2

De quel type est 'key'? – chris

+0

Comme chris l'a dit, la clé est-elle un type signé? Probablement une mauvaise idée. –

+0

Pourquoi pas? –

Répondre

1

Déclare key entier non signé tant que devrait faire l'affaire.

2

Faites de 'clé' un type non signé, tel que 'unsigned int'.

La raison pour laquelle il devient négatif est que pour les types signés, le bit haut indique le signe. Une fois que le hachage était plus grand que 0x7FFFFFFF, le bit de signe devient '1' et la valeur devient négative. Les types non signés n'utilisent pas de bit de signe. Les valeurs trop grandes continuent à rester positives.

Questions connexes