-1 ^ 1 ?? - C - Programmation
Marsh Posté le 29-01-2005 à 22:42:29
Avant le patch: tous les bits de swap sont à 1.
Après le patch: tous les bits de swap sont à 1, sauf celui de poids faible.
Reste à savoir pourquoi, en fonction du contexte.
Marsh Posté le 29-01-2005 à 23:21:03
heu je capte toujours pas, avant le patch, swap vaut pas -1
Marsh Posté le 29-01-2005 à 23:31:32
-1 en décimal. En binaire (complément à 2), tous les bits sont à 1.
Ça, c'est avant le patch.
Ce dernier rajoute un XOR (opérateur ^) avec 1, qui a pour effet de mettre à zéro le bit de poids faible.
C'est dans quel fichier (en voyant le contexte ce sera plus simple) ?
Marsh Posté le 29-01-2005 à 23:47:13
t'es pas entrain de nous prendre la tête pourquoi une variable swap perdue dans des milliers de lignes de code passe de -1 à -2 ?
Marsh Posté le 30-01-2005 à 00:39:47
printf a écrit : -1 en décimal. En binaire (complément à 2), tous les bits sont à 1. |
sachant que swap est un int, ca a toujours un sens ?
le fait d'utiliser l'opérateur xor caste implicitement le -1 en binaire ?
pour la fonction complète qui fait la comparaison binaire de deux caractères :
Code :
|
Marsh Posté le 30-01-2005 à 00:41:49
joce a écrit : sachant que swap est un int, ca a toujours un sens ? |
houla, que diable veut dire ceci ?
Marsh Posté le 30-01-2005 à 00:42:10
Taz a écrit : t'es pas entrain de nous prendre la tête pourquoi une variable swap perdue dans des milliers de lignes de code passe de -1 à -2 ? |
non, je cherche à savoir la signification de la syntaxe de -1^1 dans ce cas précis.
Apparement printf a compris ce que je demandais, mais toi tu peux pas t'empêcher de prendre les gens de haut ?
Marsh Posté le 30-01-2005 à 00:43:02
chrisbk a écrit : houla, que diable veut dire ceci ? |
ba je sais pas, faire un XOR sur un int ca me parait intuitivement bizarre, donc j'imagine qu'il prend la representation binaire du truc de façon implicite ?
Marsh Posté le 30-01-2005 à 00:44:22
joce a écrit : ba je sais pas, faire un XOR sur un int ca me parait intuitivement bizarre, donc j'imagine qu'il prend la representation binaire du truc de façon implicite ? |
bin pour ton compilo, un int c'est juste 32 bits a la suite (donc forcement du binaire). Y va pas se poser des questions philosophique la dessus
Marsh Posté le 30-01-2005 à 00:46:08
chrisbk a écrit : bin pour ton compilo, un int c'est juste 32 bits a la suite (donc forcement du binaire). Y va pas se poser des questions philosophique la dessus |
vu comme ca c'est vrai
Marsh Posté le 30-01-2005 à 00:59:05
donc d'après ce que je comprends du code, si
return ((int) *a - (int) ' ') ^ swap;
est executé, on est sur de garder le premier bit tel quel alors que tous les autres bits sont inversés ?
Marsh Posté le 30-01-2005 à 15:37:53
joce a écrit : ba je sais pas, faire un XOR sur un int ca me parait intuitivement bizarre, donc j'imagine qu'il prend la representation binaire du truc de façon implicite ? |
euh... que tu sois en C, ou autre, le résultat final est du binaire hein... un programme est traduit en assembleur, dont chaque instruction possède une opcode binaire...
un int c'est quoi ? 32 bits ! que tu fasses un XOR sur 32 bits, ou 16, ou 8, ou est le problème
edit:
c'est décidé, je passe de 8 posts par page à 15, marre de me faire griller
Marsh Posté le 30-01-2005 à 18:35:46
Reply
Marsh Posté le 29-01-2005 à 21:58:16
MySQL vient de corriger un bug que j'ai reporté, et la diff du fix consiste en :
- swap= -1; /* swap sign of result */
+ swap= -1 ^ 1; /* swap sign of result */
J'avoue que je capte pas du tout le fix, c'est quoi la subtilité du -1 ^ 1 ?
La description du bug c'est :
Fix for a bug in multi table updates, when offset of one table is
5 bytes or more. This occured because in that case binary(5) indexed
column is space packed, so it was hit by this bug in the function
for binary comparison.
---------------
Protèges carnets personnalisés & accessoires pour bébé