Savoir si un bit est "clear" ou "set"

Savoir si un bit est "clear" ou "set" - Python - Programmation

Marsh Posté le 14-09-2005 à 16:24:23    

Bonjour,
 
Je suis en train de realiser un parseur/afficheur de fichier bitmap et jen suis au type monochrome et j'ai des soucis pour savoir si un bit est set ou celar. Si y vaut 1 ou 0 si j'ai bien compris :s.
J'ai deja essayé ça :
 

Code :
  1. for j in range(1, 9):
  2.     bit=(a>>j) & 1


 
Mais je pense meme si ça me renvoi bien des 1 ou des 0 que c pas tt à fé ça paske le dessin n'est pas similaire au dessin original et celon les operations que je fait pour recupere la valeur du bit, le dessin change legerement donc je me dit que c'est cette detection de la valeur du bit qui merdoie.
 
Merci de m'aider !!!!

Reply

Marsh Posté le 14-09-2005 à 16:24:23   

Reply

Marsh Posté le 14-09-2005 à 17:03:37    

sequence : 11001
 
tu veux tester le bit du milieu (0)
mask = 00100
 
rep = sequ & mask  
 
dont c'est le mask qu'il faut modifier avec <<


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 14-09-2005 à 17:27:43    

je suis desolé j'ai bcp de mal avec ça lol, j'ai à peu pres compris ce que u ma dit mais je doute que ce que j'ai fait soit bon, (de tte façon vu le resultat c pas bonà

Code :
  1. for j in range(1, 9):
  2.     bit=a & (10000000>>1)


je me doute qu'il faut pas mettre 10000000 mais plutot un byte qui a une sequence de bit de 10000000 mais comment faire ça :S ??? Ou n'ai je rien compris du tout ^^
 
en tou cas merci de m'aider.
 
Autre question, en fait quand on fait ça >> ça decale tout les bit d'un range vers la gauche c ça ? donc si on a 00100100 ça donne 00010010 ? et avec << c le meme principe mais à gauche ?
 
et le & je sais que c un ET mais ça fé koi ça additionne ? et les additions de bits c pareil que les addition normale à savoir 1+1 = 2?
 
Merci :)
 
Et dsl si je pose des question stupides lol

Reply

Marsh Posté le 16-09-2005 à 17:47:42    

Up :s

Reply

Marsh Posté le 18-09-2005 à 14:34:26    

Youpieee je crois avoir trouvé :

Code :
  1. for j in range(8):
  2.     bit=a & (0x80>>j)


0x80 est en fait 10000000 en binaire et 128 en decimal
et le >>j decale le bit 1 de j rang vers la droite. ca me renvoi 0 si le bit j de a est egal à 0.
 
Jsuis content ptdr.
Va falloir que je test une fois rentre chez moi avec la bitmap

Reply

Marsh Posté le 18-09-2005 à 14:51:23    

t'as jamais songé à décaler "1" par la droite pour créer ton masque, comme tout le monde [:petrus dei]


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Marsh Posté le 18-09-2005 à 15:04:40    

Ske tu peux expliker, stp, paske (surement que jai pas compris mais bon ^^) :

Code :
  1. >>>153&(0x80>>4)
  2. 8
  3. >>> 153&(1>>4)
  4. 0

Reply

Marsh Posté le 18-09-2005 à 15:09:24    

décalage par la droite j'ai dit [:petrus75]

>>> 1<<4
16
>>> 153 & 1<<4 # == 10000 == 16
16
>>> 153 & 1<<3 # == 01000 == 8
8


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Marsh Posté le 18-09-2005 à 15:13:39    

Oki dc ds ce cas ça commence par le bit de droite, c ds le sens inverse à ce que j'avais reussi à comprendre :D
Merci pour cette precision ;)
 
Ah oui ça yai j'ai compris avec la calculettte de windows pkoi kan je lui rentrais 1 en decimal en binaire y mettais simplement 1, spaske c 00000001

Reply

Sujets relatifs:

Leave a Replay

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