Accès au nième bit sans instruction conditionnelle

J’ai donc une séquence de bits:

1010

1 est le MSB.

Ma fonction doit renvoyer un entier égal à 0 si un bit impair est à 0 ou à 1 si c’est un 1.

Je ne peux utiliser aucune boucle for ou quelque chose de ce genre pour voir si je dois renvoyer un 0 ou un 1. Quelqu’un a-t-il des suggestions quant à la manière de s’y prendre.

Je pensais utiliser une opération pas, mais je peux comprendre comment l’utiliser exactement.

Jusqu’à présent, j’utilise une séquence de 1010 … 10, puis je la répète. Cela me donnerait 1010. Maintenant, je dois savoir si je retourne un 1 ou un 0.

    Disons que nous parlons d’entiers 32 bits. Je suppose que vous voulez savoir si TOUT bit ODD est réglé sur SET (1).

    Pour ce faire, nous créons un entier qui ressemble à ceci:

     10101010101010101010101010101010 

    Maintenant, si nous ET ( & ) par là, tous les bits pairs sont filtrés. Maintenant, si le nombre n’est pas nul, un ou plusieurs bits impairs ont été définis. En C:

     #include  int hasodd(uint32_t x) { // 0xAAAAAAAA = 10101010101010101010101010101010 // double negation to turn x>0 into 1 and leave 0 alone return !!(x & 0xAAAAAAAA); } 

    Si vous vouliez dire que vous devez indiquer si le Nième bit est activé, cela fonctionne. Il déplace à droite un 1 à la position correcte pour filtrer tous les bits non pertinents:

     #include  int nthbitset(uint32_t x, int n) { return x & (1 << n); } 

    Je ne comprends pas très bien le sens de votre question. Cela ressemble à un devoir. En fonction de vos besoins réels (comme le dit le titre de la question ou dans le texte), l’un d’entre eux fonctionnera dans la plupart des applications C :

     int hasoddbitset (int v) { return (v & 0xaaaaaaaa) != 0; // for 32 bit ints } int isbitset (int val, int bitnum) { return (val & (1 << bitnum)) != 0; }