Vad är bitvisa operatörer?
I ett datorprogram är bitvisa operatörer operatörer för att manipulera bitmönster i uttryck. Bitvis OCH, ELLER, exklusiv ELLER (XOR), INTE, högerväxling och vänsterskift är vanliga operationer. De flesta datorprogrammeringsspråk inkluderar alla dessa sex operatörer. De används ofta för att ställa in, rensa eller vända enskilda bitar i program som styr datormaskinvara. Bitvisa operatörer används också ofta i datakryptering och komprimeringsalgoritmer.
De vanliga bitvisa operatörerna representeras vanligtvis symboliskt i programmeringsspråk som C, C ++ och Java. De används i uttryck precis som aritmetiska operatörer som plus- eller minustecken skulle vara. Den bitvisa operatören AND representeras med ampersand & , ELLER med röret | och XOR med vagnen ^ . INTE, även känd som komplementoperatören, indikeras med en tilde ~ .
Högerväxeloperatören använder en dubbel caret som pekar till höger >> . Däremot indikeras vänsterväxling med en vänsterpekande dubbelkaret << . Java inkluderar ytterligare en högerväxling, visad med en högerpekande trippelkaret >>> .
Bitvisa operatörer tillämpar en logisk operation på varje bitpar i sina operander. INTE, högerväxling och vänsterförskjutning har bara en riktig operand; det andra värdet i skiftoperationer är bitantalet. För att bättre förstå hur bitvisa operatörer fungerar kan en individ visualisera sina operander som binära siffror. Exempelvis vänder komplementoperatören varje bit av sin enda operand till motsatt tillstånd. En blir noll och noll blir en. Komplementet för det 8-bitars binära värdet 00110101 är 11001010.
AND-operatören har två operander. Bit för bit utförs en logisk OCH-operation med en motsvarande bit från varje operand. Resultatet av varje bitoperation placeras i den bitpositionen för det totala resultatet. Till exempel kommer AND-operatören att behandla bit 7 i en operand med bit 7 i den andra operand. Resultatet lagras i bit 7 av det totala resultatet.
I en AND-operation måste båda operandbitarna vara sådana för att resultatet ska bli ett, annars blir resultatet noll. Till exempel, om de 8-bitars binära värdena för operandema är 00110101 och 11110000, blir resultatet 00110000. En vanlig användning av AND-operatören är att nollställa särskilda bitar i resultatet. Detta görs genom att placera nollor i dessa bitpositioner i en av operandema.
I en OR-operation måste båda operandbitarna vara nollor för att resultatet ska vara noll; annars är resultatet ett. En vanlig användning av OR-operatören är att ställa in vissa bitar av resultatet till sådana. Detta görs genom att placera sådana i dessa bitpositioner i en av operandema. För XOR-operationen är resultatet noll om båda operandbitarna är noll eller om båda operandbitarna är en - annars är resultatet ett.
Vänster skift och höger skift flyttar bitarna i operand vänster eller höger med det angivna antalet bitpositioner. En logisk högerförskjutning flyttar en noll till den vänstra biten som en del av skiftet. En aritmetisk högerväxling kopierar den vänstra biten - teckenbiten - innan skiftet till samma position efter skiftet. Den ursprungliga biten flyttas också åt höger tillsammans med resten. Endera typen av vänsterförskjutning flyttar noll till den högsta biten.
När en operand är högerförskjuten, kastas den högsta biten innan skiftet helt enkelt bort. På liknande sätt avlägsnas den vänstra biten innan en vänsterskift. Det slår inte runt till den andra änden av operanden.
Bitvis skiftoperationer är språk- och implementeringsberoende. Till exempel, i C och C ++, >> och << utföra logiska skift om operand är ett heltal utan signatur. Om operanden är ett signerat heltal är det troligt att en aritmetisk förskjutning görs istället. I Java betraktas alla operander som signerade, och aritmetiska skift utförs alltid med >> och << . >>>- operatören används för en logisk högerväxling, men det är fortfarande möjligt att av misstag göra en aritmetisk högerväxling istället utan noggrann typsnitt.
Komplikationer kan också uppstå när operander har olika bitlängder eller när vissa är signerade och andra inte är signerade. Bitvisa operatörer och numeriska konstanter i mitten av ett komplext uttryck kanske inte utvärderas som förväntat. Man måste vara noga med att ange storlek och signerad / osignerad karaktär för varje kvantitet i uttrycket. Detta kan göras med noggrann typkasting eller interimsuppdrag till specifika variabeltyper i programkod.