operation binaire en C ....

operation binaire en C .... - Programmation

Marsh Posté le 31-01-2001 à 21:49:17    

comment fait on en C une operation binaire?
je souhaite un decalage vers la droite sur un octet
 
soit par ex 1001 1101 ----> 1100 1110.
 
en ASM no problem mais en C ???

Reply

Marsh Posté le 31-01-2001 à 21:49:17   

Reply

Marsh Posté le 31-01-2001 à 22:06:12    

Avec les opérateurs de décalage de bits ">>" et "<<".

Reply

Marsh Posté le 31-01-2001 à 22:11:15    

merci .. et ca fonctionne comment ??
 
ex : moi j'ai :
 
char Filtre(char octet)
{....
 return octet;
}
 
les .... representant le decalage vers la droite

Reply

Marsh Posté le 31-01-2001 à 22:54:17    

Dans ta question, tu demandes un decalage vers la droite d'un octet et tu donnes comme exempless
 
1001 1101 ----> 1100 1110.ss
 
Je pense que tu as voulu dire un décalage de 1 bit vers la droite.
 
En c effectivement on peut faire trs facilement ca.
 
tu decales de x bits vers la gauche (<< ) ou droite (>> ) mais seulement lors du decalage, ca rajoute des 0 et pas des 1 , alors si tu veux des 1 il va falloir utiliser un masque en plus.
 
1001 1101ss>> 1 donne 0100 1110ss
ssssssssssssss et non 1100 1110
 
ainsi 8 >> 2 ( qui correspond à divisé par 4) donne 2
 
soitss
0000 1000 >> 2 donne 0000 0010

Reply

Marsh Posté le 31-01-2001 à 23:42:05    

char filtre(char octet)
{
ssssreturn (octet>>1);
}
 
Comme Xilebo le fait remarquer, ça te rajoutera un zéro en bit de poids fort (le + à gauche)

Reply

Marsh Posté le 01-02-2001 à 09:38:53    

on peut faire :
char filtre(char octet)
{
return((octet>>1)|0x80);
}
 
ça me semble pas mal, mais ça fait un peu bricolage :D

Reply

Marsh Posté le 01-02-2001 à 11:47:20    

dans mes souvenirs... jespere que je confond pas les languages :D
 
il me semble qu'il existe les fonctions: shiftleft et shiftright
 
enfin le nom excate jsais plus trop...


---------------
"C'est le boulot qu'on ne commence jamais qui est le plus long à terminer"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed