begin process at 2010 02 10 14:26:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Maths & Algorithmes

 > 

Bitwise...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Bitwise...

lundi 23 décembre 2002 à 22:07:57 | Bitwise...

MeltedMind

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
<pre>
#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");
}
</pre>
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.
lundi 30 décembre 2002 à 15:49:09 | Re : Bitwise...

zul

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.



-------------------------------
Réponse au message :
-------------------------------

> 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
> <pre>
> #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");
> }
> </pre>
> 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.
lundi 6 janvier 2003 à 17:38:31 | Re : Bitwise...

MeltedMind

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

-------------------------------
Réponse au message :
-------------------------------

> 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.
lundi 6 janvier 2003 à 19:01:26 | Re : Bitwise...

zul

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



-------------------------------
Réponse au message :
-------------------------------

> 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
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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.
>


Cette discussion est classée dans : int, printf, n1, n2, outbinairy


Répondre à ce message

Sujets en rapport avec ce message

multiplication de 2 vecteurs vers marices C++ [ par cadet1401 ] voila j'essaye de réaliser un programme dans lequel je multiplie 2 vecteurs et dont le resultat doit etre affiché dans une matrice.voici mon code sour Wad File [ par Nicolas___ ] Bonjour , voila j'ai un petit probleme pour lire 1 fichier WAD (  wad  )donc suivant le modele décrit je me suis fait 2 structures : struct Header{ Table de hachage avec patronyme [ par guitoontruant ] Bonjour, Désolé, j'avais d'abord poster dans les discussions libres.Voilà je dois créer une table de hashage de patronymes par le biais de N entrées, Langage C : Puissance 4 [ par breakeur59150 ] Bonjour à tous,j'ai une ou deux question à vous poser, je suis en train de faire le jeu puissance 4 en langage c sous borland C, C'est un projet que l Puissance 4 en C [ par drinky05 ] Bonjour, j'aurai besoin d'aide pour mon programme, grand débutant, c'est pour un projet en cours, je dois réaliser un puissance 4, il fonctionne a peu aide [ par achrafgassolina ] salut tout le monde la j ai une érreure et je c pas comment la resoudre dans la ligne 296:36 dans la condition if et aprés je veux faire la saisie des Programme Tri à Bulle [ par tivanbelle ] Bonjour,J'ai fait ce programme en cours, c'est un tri a bullequi tri des valeur donc 2à2, mais le programme ne fonctionne pas. Pouvez vous me dire ce Equation du 3éme degrée [ par jeanphilippe37 ] Slt, je t'envoie le programme de maths, ms j'ai essayé de mettre un system(pause) ms cela me fou une erreur de compilation. Pourré-tu me dire conflit de type dans un tableau [ par pausecpp ] j'ai eu une réponse inattendue. voici un partie du code (l'essentiel ;) ):...#define N 5....float V[N]={0}; int i;for(i=0; i{printf("\nEntrer la coord Ouvrir et afficher un fichier texte en C [ par AsM0DeUz ] 'lut Je m'initie actuellement au C. Apres avoir fait les exos les plus basiques ... je passe au basique niveau 2 J'ai ecris qques lignes pour afficher


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales