Bitwise...

MeltedMind Messages postés 35 Date d'inscription mardi 8 janvier 2002 Statut Membre Dernière intervention 6 janvier 2003 - 23 déc. 2002 à 22:07
cs_zul Messages postés 2 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 6 janvier 2003 - 6 janv. 2003 à 19:01
Wise ou not wise là est la question.

Je me demandais... sur le fonctionnement primaire de nos petites machines. 1+ 1 = 10, c'est bien connu mais comment c'est compet avec les opérateurs bit-wises (and, or, not, xor) qui sont fondamentalement toutes les opérations que peuvent faire notre ordi.

Je me souviens par exemple que notre ordinateur pour arriver a soustraire un nombre d'un autre nombre fait une addition:

Reponse = ~(~Nombre1 + Nombre2) ;

essayez ça fonctionne très bien

#include "stdio.h"
void OutBinairy(int Val);
int main(int argc, char* argv[])
{
int n1 = 43;
int n2 = -43;
int rep = ~(~n1+n2);
printf("\n");
OutBinairy(n1);
printf("\n");
OutBinairy(n2);
printf("\n");
OutBinairy(rep);
printf("\n");
printf("%d - %d = %d\n",n1,n2,rep);

return 0;
}
void OutBinairy(int Val)
{
for(int i=16-1;i>=0;i--)
if((Val>>i)&0x1)
printf("1");
else
printf("0");
}

Bon ici j'essaie avec 43 et -43 pas beaucoup de rigueure mais c'est juste pour que vous voyez que 43 = ~43+1 en format binaire.

Alors ce que je cherche c'est comment ont fait l'addition sans se servir du + (et évidement encore moins du -) ce qui je l'avoue me mystifie. Je suis capable de le faire étape par étape, mais alors c'est une boucle à moins que j'aie une lookup table aussi grande que sizeof(type_a_adittionner)²

Pourtant bien des processeur font a+b en un coup de clock.
(ensuite se sera de trouver comment les DSP font leurs multiplications en un coup de clock:-)

MeltedMind
[...]selon laquelle notre plus grosse erreur avait été de descendre des arbres.

3 réponses

cs_zul Messages postés 2 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 6 janvier 2003
30 déc. 2002 à 15:49
pour l'addition de base
+ 0 1
0 0 1
1 1 10

Le chiffre est obtenu par un xor et la retenue par un et. (voir half-adder ou full-adder sur le net). pour un nb binaire, je sais pas exactement comment il decompose chaque bit (un mask avec et 000 ... 1 0000 avec 1 placé en i position puis op en parralèle ???)

Pour la division euh bin c une addition par l'opposé je dirai. Mais je suis pas sur. fo ke je verifie.
0
MeltedMind Messages postés 35 Date d'inscription mardi 8 janvier 2002 Statut Membre Dernière intervention 6 janvier 2003
6 janv. 2003 à 17:38
Merci beaucoup, donc si j'ai bien compris, l'adition se fait forcément bit par bit, il n'y a pas de recette magique, c'est le hard-ware lui même qui permet de le faire en un coup de clock!

Encore merci. C'est des notions de bases vraiement intéressante.

MeltedMind
0
cs_zul Messages postés 2 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 6 janvier 2003
6 janv. 2003 à 19:01
oui l'important a noter que j'ai oublié de dire la premiere fois
que les données ne sont pas de n'importe quelles tailles mais tjs codé sur 16 , 32 ou 64 bits.(dependant de la machine).
Il est a noter que le half adder (description precedente) n'est pas la seule architecture possible. Il existe en effet de nombreux autre algorithme qui permettent d'ameliorer la propagation de la retenue voir meme de zapper la propagation de la retenue. je mettrai des liens si ca t'interesse.

ZUL
0
Rejoignez-nous