[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux] Re: Manipuler un bit en c



ah, autant pour moi , sorry :p  

Ce sont les (relativement) nouveau types POSIX, portables et clairs
quand au nombre de bit que tu veux utiliser.

JeF
On Thu, Mar 14, 2002 at 11:48:06PM +0100, Benoit Joseph wrote:
> 
> Le calcul booléen, je connais! :-) Pe même un peu trop...
> Ce que je ne connaissais pas c'est les types que tu as employé...
> 
> Merci tout de même
> 
> Benoit
> 
> On Thu, Mar 14, 2002 at 08:04:23AM, Jean-Francois Dive wrote:
> > La méthode des opérations logiques est la plus classique. Se que tu explique est tout a fait
> > correcte, mais uniquement pour déclarer des structures avec des champs
> > de bits (utilisés typiquement pour déclarer des structures de packets, etc..).
> > 
> > Une explication plus générale. Euuh ben je dois dire que ca pourrais prendre
> > trop de place sur un email. Le plus simple a mon avis, c'est que tu relook une
> > explication générale des mathématique booléenne, tout deviendra très clair.
> > Ensuite, il faut trouver une explication sur les math booléennes en C pour 
> > la notation, pas trop compliqué, il faut juste connaitre les opéarateurs:
> > 
> > & (AND),  | (OR), >> << (shift),  etc. etC..
> > 
> > JeF
> > 
> > On Wed, Mar 13, 2002 at 04:13:50PM +0100, Benoit Joseph wrote:
> > > 
> > > Je veux bien une explication un peu plus complète. J'ai toujours
> > > manipuler mes bits comme ça. Qu'est ce que ta méthode apporte? Je ne
> > > connaissais pas.
> > > 
> > > Ben
> > > 
> > > On Wed, Mar 13, 2002 at 02:44:16PM, Jean-Francois Dive wrote:
> > > > oui, enfin, la manipulation de bit se fait la plupart du temps avec
> > > > des operations logiques et un masque. exmple:
> > > > 
> > > > uint8_t a = 1; ( bin= 0000 0001)
> > > > 
> > > > uint8_t b = a | 0x10; (bin 0000 0001 OR 0001 0000 = 0001 0001)
> > > > 
> > > > Dont, tu applique un masque avec OR pour setter un bit, et un AND pour
> > > > clearer un bit (tu AND avec 0 dans le masque).
> > > > 
> > > > JeF
> > > > 
> > > > On Wed, Mar 13, 2002 at 12:55:09AM +0100, Benoit Joseph wrote:
> > > > > 
> > > > > Tu dois définir des structures avec des champs de bits. genre
> > > > > 
> > > > > struct One_by_One {
> > > > > 	a:1;
> > > > > 	b:1;
> > > > > 	c:1;
> > > > > 	d:1;
> > > > > 	e:1;
> > > > > 	f:1;
> > > > > 	g:1;
> > > > > 	h:1;
> > > > > };
> > > > > 
> > > > > struct Octet {
> > > > > 	octet:8;
> > > > > }
> > > > > 
> > > > > Si tu veux faire référence parfois à l'un parfois à l'autre, il faut que
> > > > > tu fasse une union de ces deux structures.
> > > > > 
> > > > > union {
> > > > > 	struct Octet o;
> > > > > 	struct One_by_One b;
> > > > > } plok;
> > > > > 
> > > > > un appel au premier bit serait plok.b.a
> > > > > 	
> > > > > ou quelque chose dans le goût enfin... Tu peux aussi jouer avec des
> > > > > typedef pour faire joli...
> > > > > 
> > > > > A+
> > > > > 
> > > > > Benoit
> > > > > 
> > > > > PS: je ne garantis pas la syntaxe, mais l'idée y est. ;-)
> > > > > 
> > > > > On Wed, Mar 13, 2002 at 12:34:36AM, Benoît Barbier wrote:
> > > > > > Bonjour,
> > > > > > 
> > > > > > Désolé pour le hors-sujet.
> > > > > > Je voudrais savoir comment on peut manipuler un bit particulier d'un octet en c
> > > > > > Par ex. :
> > > > > > int test=0;
> > > > > >    //Positionner le 3ème bit de poids faible à 1
> > > > > >  printf ("\n\nLa val du nb : %d après inversion du 3eme bit \n\n", test);
> > > > > > //Et il m'afficherait 4.
> > > > > > Ce serait pour faire des catégories par ex.
> > > > > > Un peut comme les droits d'accès sous linux un bit pour (en partant du poids faible) : 
> > > > > > l'exécution, l'écriture, la lecture.
> > > > > > Y a-t-il moyen?
> > > > > > Comment fait-on?
> > > > > > 
> > > > > > Merci d'avance
> > > > > > Benoît
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > _______________________________________________
> > > > > > Linux Mailing List
> > > > > > Archives: http://unixtech.be/mailman/listinfo/linux
> > > > > ---end quoted text---
> > > > > 
> > > > > -- 
> > > > > 
> > > > > Benoit JOSEPH 
> > > > > Manex SPRL: benoit.joseph@manex.be
> > > > > Perso: joker@baby-linux.net
> > > > >        benoit.joseph@teledisnet.be
> > > > 
> > > > 
> > > > 
> > > > -- 
> > > > -> Jean-Francois Dive
> > > > --> jef@linuxbe.org
> > > 
> > > 
> > > ---end quoted text---
> > > 
> > > -- 
> > > 
> > > Benoit JOSEPH 
> > > Manex SPRL: benoit.joseph@manex.be
> > > Perso: joker@baby-linux.net
> > >        benoit.joseph@teledisnet.be
> > 
> > 
> > 
> > -- 
> > -> Jean-Francois Dive
> > --> jef@linuxbe.org
> 
> 
> ---end quoted text---
> 
> -- 
> 
> Benoit JOSEPH 
> Manex SPRL: benoit.joseph@manex.be
> Perso: joker@baby-linux.net
>        benoit.joseph@teledisnet.be



-- 
-> Jean-Francois Dive
--> jef@linuxbe.org

Attachment: pgp00998.pgp
Description: PGP signature