Comment réinitialisez-vous une valeur de bit dans une chaîne?

Dans la récente interview, j’ai eu une question comme celle-ci:

Given a ssortingng value, find out its 127th bit and reset it, do this in C language Reset means if that particular bit is 0 change to 1 and vice versa

Je n’ai pas trouvé d’algorithme pour cela, mais je veux savoir comment on pourrait résoudre cela en langage C

Modifier:

Après avoir obtenu la réponse de quelques-uns, j’ai essayé ceci:

 #include void main() { char *str="anto"; str[15] ^= 0x80; printf("%s",str); } 

Je reçois la sortie en tant que: anto . Maintenant, j’ai la grève dans ma tête qui change un peu ne change pas la sortie?

En supposant que char soit 8 bits et que l’endian est little-endian:

 char *str = ...; str[15] ^= 0x80; 

Cela retournera le 127ème bit.

MODIFIER:

Si le bit-endian est big-endian, utilisez plutôt 0x01 .

La réponse dépend également de la façon dont les bits sont numérotés. Si nous commençons à numéroter à partir de 0, utilisez 0x80 . Si nous 0x40 partir de 1, nous utilisons 0x40 . ( 0x01 et 0x02 pour big-endian)

EDIT 2: Voici le cas général: (avec les mêmes hypothèses)

 char *str = ...; int bit = 127; int index = bit / 8; // Get the index int chbit = bit % 8; // Get which bit in the char int mask = 1 << chbit; // Build the mask str[index] ^= mask; // XOR to flip the bit. 

Pour basculer n’importe quel bit dans une chaîne:

 #include  void flip_bit(char *x, int bit_no) { (x + bit_no/CHAR_BIT) ^= 1 << bit_no%CHAR_BIT; } 

Explication: La recherche du bit_no: le bit est effectué en deux étapes:

D'abord autant d'octets que nécessaire (division entière): (x + bit_no / CHAR_BIT)

Ensuite, autant de bits qui restnt. Ceci est effectué en décalant de 1 bit par aucun bit% CHAR_BIT (le rest).

Enfin basculer le bit en utilisant l'opérateur xor (^).

La première est que vous demandez est dit en tant que bascule pas réinitialiser okey

Pour basculer un peu

L’opérateur XOR (^) peut être utilisé pour basculer un bit.

  number ^= 1 << x; 

Cela va basculer bit x. pour plus d'informations, pensez à lire ceci

Maintenant, comme vous le savez, la chaîne est le nombre de caractères et la taille d'un caractère est égale à 1 octet.

Vous devez créer un masque de bits, pour le n-ème bit, le masque de bits sera:

 char *bitmask = 2^(n-1); 

et pour retourner le bit xor la chaîne et le bitmask:

 ssortingng ^= bitmask;