Csharp/Binære operasjoner

(Omdirigert fra «Csharp/Kapittel18»)

Binære operasjoner

rediger

Som alle andre programmeringsspråk, benytter C# binærtall i bunn og grunn, fordi prosessoren gjør det. I noen tilfeller er man interessert i å jobbe på et binært nivå, og da bruker man binære operasjonene: Og, eller ekskluderende eller, og bitshift. Man regner bit fra høyere mot venstre, som med tall. Verdien av hvert byte er i samme rekkefølge.

<-Høyest                   Lavest-> 
11111111 11111111 11111111 11111111
    3        2        1        0
  • & binær og
  • | binær eller
  • ^ binær ekskluderende eller
  • >> binær shift høyere
  • << binær shift venstre

og, eller og ekskluderende eller har stort sett samme resultat her, som i logisk, men her jobbes det på hvert bit, framfor hele tallet som helhet. bitshift flytter bitmønsteret i tallet med spesifisert antall. f.eks.

00000001 << 1 = 00000010
00000001 << 4 = 00010000

hvis bit forsvinner ut av tallet, kalles det overflow, men vil ikke gi noen feilmelding, og verdien av bittet er tapt.

binær og kan brukes for å teste om bit er satt, dette er spesielt nyttig sammen med enums, som DaysInWeek enumen som vi definerte tidligere. Man kan da si at man har flere verdier i én, og etterpå teste verdien. Man bruker Og for å legge til flere bit.

DaysInWeek days_at_mother;
days_at_mother = DaysInWeek.Monday | DaysInWeek.Wednsday | DaysInWeek.Sunday;
if( (days_at_mother & DaysInWeek.Thursday) == DaysInWeek.Thursday )
  MessageBox.Show("I was at my mother thursday");
else
  MessageBox.Show("I was at home thursday.");

Merk her at vi først henter ut alle bits i days_at_mother som også er i Thursday, og sjekker at de er like, hvis Thursday består av flere bit, men bare ett av dem er satt, ville vi fått true dersom vi hadde sjekket om det var større, derfor skal man alltid sjekke med "==".