Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Logica booleana ed operatori bitwise

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Logica booleana ed operatori bitwise

Messaggioda Foto Utenteharpefalcata » 21 nov 2017, 11:00

Buongiorno a tutti.

Chiedo oggi lumi riguardo un argomento un po' atipico, spero di non aver sbagliato troppo sezione, e di ricevere qualche aiuto.

Stò sviluppando un firmware per un microcontrollore, il cui core è a 32 bit, ma la richiesta che stò per fare è di logica e quindi si può applicare anche ad otto bit, perché è più semplice ragionare in termini di otto bit.

Dunque, i requisiti sono questi: ho a disposizione una variabile, ce è il contenuto di uno dei registrii interni al controller stesso, che ne controlla un aspetto importante, ovvero lo status dei suoi pin di uscita.

Questa variabile possiamo dire che sia fatta in questo modo: "1010 0101", a me serve che i bit in posizione due, tre e quattro, ovvero zero, uno e zero, siano cambiati in uno, uno, uno.

Devo quindi ottenere in uscita una variabile risultante di questo tipo: 1010 1111.

Per fare questa operazione, è importante che tutti gli altri bit non devono cambiare, perché regolano altre funzioni, e vorrei anche cambiare questi tre bit usando solo operatori bitwise, ovvero OR, AND, EXCLUSIVE OR, NOT e simili.

Non voglio usare operatori atomici, cioè che vadano a modificare selettivamente solo un bit per volta.

Secondo voi, qual è la sequenza più idonea?

Grazie mille a tutti.

Un saluto.
Avatar utente
Foto Utenteharpefalcata
300 1 3 5
Stabilizzato
Stabilizzato
 
Messaggi: 348
Iscritto il: 28 lug 2015, 21:03

1
voti

[2] Re: Logica booleana ed operatori bitwise

Messaggioda Foto Utenteboiler » 21 nov 2017, 11:24

Codice: Seleziona tutto
variabile = 0b10100101;
variabile = variabile | 0b00001110;


Piú in generale:
- con un bitwise-and e una maschera tutta a 1 tranne dove vuoi il cambiamento, azzeri i bit.
- con un bitwise-or e una maschera tutta a 0 tranne dove vuoi il cambiamento, metti i bit a uno.

Boiler
Avatar utente
Foto Utenteboiler
15,9k 5 7 13
G.Master EY
G.Master EY
 
Messaggi: 2760
Iscritto il: 9 nov 2011, 12:27

0
voti

[3] Re: Logica booleana ed operatori bitwise

Messaggioda Foto UtenteExodus » 21 nov 2017, 11:25

Un OR è sufficiente per questa operazione:
1010 0101 OR 0000 1110 = 1010 1111
Considera che il bit meno significativo è il bit 0, quindi i bit che devi cambiare sono bit 1, 2 e 3.
Avatar utente
Foto UtenteExodus
169 2
Frequentatore
Frequentatore
 
Messaggi: 138
Iscritto il: 25 ago 2017, 17:30


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti