Binære tall har grunntall 2 og sifferverdier 0 og 1. Binære tall er lagret i dataord med 8, 16, 32 eller 64 bit. Siden sifferverdiene er 0 og 1, kan binære tall lagre logiske verdier: sant eller usant, true eller false på engelsk. Hvert bit i dataordet vil representere én logisk verdi. Alle datamaskiner har instruksjoner for å gjøre logiske operasjoner (Boolske operasjoner) på binære tall. Fordi mange logiske verdier lagres i samme dataord kan operasjoner på logiske verdier bli meget effektiv.  Binære tall kan også tolkes som heltall og reelle tall, det er behandlet i egne artikler.

De tre første logiske operasjonene  tar to operander, den fjerde operasjonen tar bare én operand: 

AND - sant når begge operander er sanne (og). Symbol: \( \wedge \)

\( \begin{array}{rc} \texttt{a} &1100 \\  \texttt{b}&0101 \\  \hline  \texttt{a} \wedge \texttt{ b} & 0100  \end{array} \)

Begge operander må ha verdien 1 for at resultatet skal bli 1. 

OR - sant når en eller begge operander er sanne (eller). Symbol:  \( \vee \)

\( \begin{array} {rc} \texttt{a}&1100 \\ \texttt{b} & 0101 \\  \hline  \texttt{a} \vee \texttt{b} & 1101   \end{array} \)  

Når minst en av operandene har verdien 1 blir resultatet 1. Bare hvis begge er 0 blir resultatet 0. 

XOR - sant når én og bare én av operandene er sanne (ekskluderende eller). Symbol: \( \oplus \)

\( \begin{array} {rc} \texttt{a}&1100 \\ \texttt{b} & 0101 \\  \hline  \texttt{a} \oplus \texttt {b} & 1001   \end{array} \)  

Når begge operander har verdien 1 blir resultatet satt til 0. Dette kan også oppfattes som en addisjon uten menteoverføring. XOR brukes også til å beregne ulike paritet.

NEG -resultatet har motsatt verdi av operandens verdier (negasjon eller invertering). Symbol: \( \neg \) 

\( \begin{array} {rc} \texttt{a}&10 \\   \hline  \neg \texttt{a} & 01   \end{array} \)  

Resultatet er den inverterte operand. 

For å kunne manipulere logiske størrelser som er lagret som bit i dataord brukes skiftoperasjoner - det er operasjoner som flytter bit én eller flere plasser til høyre eller venstre innen et dataord. Bit som skiftes ut av ordet vil ved sirkulære skift føres inn igjen på den ledige plassen på motsatt side i ordet. Det finnes normalt instruksjoner for å teste om første eller siste bit i et dataord er 1. En kan teste alle posisjoner ved å skifte bitene én plass og teste til alle posisjoner er løpt gjennom.

Å teste hver enkelt bit som beskrevet over kan være tidkrevende. Derfor har mange maskiner egne instruksjoner, se [1] for å telle antall bit til første bit som er satt/ikke satt (1/0) fra høyre eller venstre kant i et dataord.  Slike instruksjoner kan brukes for å effektivisere opptelling av antall bit som er satt eller ikke satt i en bitvektor, eller for å finne alle satte eller ikke satte posisjoner i en "glissen" bitvektor.  

Logiske variable er hensiktsmessige når en skal innlemme eller utelate noe eller noen fra en kjent mengde av objekter, for eksempel fag som tilbys på en skole eller et universitet. I eksemplet nummerer vi fagene fra 1 til 12, og vi skal  lage en oversikt over de fagene hver elev tar. 1 i kolonnen betyr at eleven tar faget, 0 eller blank betyr at han/hun ikke tar faget. Dataordet vi bruker til lagring er 16 bit langt og de siste 4 bitene inneholder nuller. 

\( \begin {array} {|l|ccccc|ccccc|cc|ccccc|}   \hline  \texttt{Navn/Fagnr.}&1&2&3&4&5&6&7&8&9&10&11&12& & & & \\ \hline \texttt{Kari} &0&0&0&0&0&1&0&1&0&1&0&0&0&0&0&0 \\  \texttt{Ola} &1&0&0&0&0&1&1&1&0&1&0&1&0&0&0&0 \\ \texttt{Kristoffer} &1&0&0&0&0&1&1&1&0&1&0&1&0&0&0&0\\ \hline \end {array} \)

For å finne grupper eller personer som tar eksakt samme sett av fag kan en "XOR-re"alle kombinasjoner av to linjer mot hverandre. Hvis resultatlinjen (dataordet) er 0 har de to elevene eksakt samme sett av fag. 

Lagring av logiske verdier som bit er meget effektivt både for lagring og behandling. Store datamengder kan få plass i arbeidslager. En linje dataord med logiske verdier kaller vi en bitvektor. En stor matrise av logiske verdier for eksempel \( 10\, 000 \times 10\, 000 \) elementer vil ta omtrent \(3\, 130\, 000 \) 32-biters dataord eller vel 12 MB. En linje med 10 000 bit i bitmatrisen trenger \(  \lceil 10\,000/32 \rceil = 313\) hele dataord når ordlengden er 32 bit. En ny linje vil alltid begynne på et nytt dataord.

1. https://en.wikipedia.org/wiki/Find_first_set

Foreslå endringer i tekst

Foreslå bilder til artikkelen

Kommentarer

Har du spørsmål om artikkelen? Skriv her, så får du svar fra fagansvarlig eller redaktør.

Du må være logget inn for å kommentere.