Capovolgere il bit desiderato di un numero intero [duplicato]

0

Supponi di aver ricevuto un numero intero in notazione decimale. Questo quando rappresentato in binario sarà una serie di 0 e 1. Questa sequenza varia in lunghezza con la grandezza del numero. Supponiamo ora di voler capovolgere il bit 'n' position in questa sequenza di numeri binari, come faresti?

Il risultato del programma deve essere il numero rappresentato dalla sequenza con il bit nella 'n'th posizione capovolta.

Modifica: questa non è una domanda per i compiti a casa! Uno stagista mi ha fatto questa domanda! E tutto quello che potevo fare era armeggiare! Quindi qualcuno potrebbe darmi una mano qui! Tutto quello che posso pensare è roba a livello di assemblea in questo momento (mettilo in un registro e blah, blah)! Ma c'è un modo per farlo in C? Sono fuori da scuola da un po 'di tempo ormai! Fidati di me, i miei unici compiti al giorno d'oggi sono probabilmente le dichiarazioni dei redditi! :-D

    
posta Arpith 24.02.2012 - 15:34
fonte

2 risposte

7

Se stai assumendo che stai implementando C, puoi applicare una mask alla variabile.

Ad esempio:

a    = 0xF2  // Binary: 11110010
b    = 0xF6  // Binary: 11110110
mask = 0x04  // Binary: 00000100

c = a ^ mask  // Binary: 11110110  -> the 3rd LSB made 0 to 1 
d = b ^ mask  // Binary: 11110010  -> the 3rd LSB made 1 to 0  

Fondamentalmente, X'Or con 0 mantiene il bit così com'è. X'OR con 1 capovolge il bit.

Fai riferimento a questo: link

    
risposta data 24.02.2012 - 16:06
fonte
0

Un bit può essere attivato applicando OR bit a bit con una potenza di due all'operando. È disattivato applicando AND bit a bit con il complemento di una potenza di due all'operando

Quale potere usare e come distinguere "on" da "off" è lasciato come esercizio per il lettore.

    
risposta data 24.02.2012 - 15:59
fonte

Leggi altre domande sui tag