Binære tall har grunntall 2 og sifferverdiene 0 eller 1. I datamaskiner lagres binære tall 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 (som regel brukes de engelske betegnelsene true eller false). 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 eller reelle tall.

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

AND gir resultatet 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 gir resultatet 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 gir resultatet 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 gir resultat som 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 såkalte skiftoperasjoner. Dette 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 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.

Verdien 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 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.

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.