Vad är Bitwise Operators?

I ett datorprogram är bitvisa operatorer operatorer för att manipulera bitmönster i uttryck. Bitvis AND, OR, exklusiv ELLER (XOR), NOT, högerväxling och vänsterväxling är vanliga operationer. De flesta datorprogrammeringsspråk inkluderar alla dessa sex operatörer. De används ofta för att ställa in, radera eller vända enskilda bitar i program som styr datorhårdvara. Bitvisa operatorer används också ofta i datakryptering och komprimeringsalgoritmer.

De vanliga bitvisa operatorerna representeras vanligtvis symboliskt i programmeringsspråk som C, C++ och Java. De används i uttryck precis som aritmetiska operatorer som plus- eller minustecken skulle vara. Den bitvisa operatorn AND representeras med et-tecken &, OR med röret | och XOR med raden ^. NOT, även känd som komplementoperatorn, indikeras med en tilde ~.

Den högra växelföraren använder en dubbel skärm som pekar åt höger >>. Däremot indikeras vänsterförskjutning med en vänsterpekande dubbelkart . Java inkluderar en annan högerväxlingsoperation, visad med en högerpekande trippelkaret >>>.

Bitvisa operatorer tillämpar en logisk operation på varje par av bitar i sina operander. INTE, högerväxling och vänsterväxling har bara en sann operand; det andra värdet i skiftoperationer är biträkningen. För att bättre förstå hur bitvisa operatorer fungerar kan en individ visualisera sina operander som binära siffror. Till exempel vänder komplementoperatorn varje bit av sin enda operand till det motsatta tillståndet. En etta blir en nolla och en nolla blir en etta. Komplementet av det 8-bitars binära värdet 00110101 är 11001010.

AND-operatorn 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-operatorn att bearbeta bit 7 i en operand med bit 7 i den andra operanden. Resultatet kommer att lagras i bit 7 av det totala resultatet.

I en OCH-operation måste båda operandbitarna vara ettor för att resultatet ska bli ett, annars är resultatet noll. Till exempel, om de 8-bitars binära värdena för operanderna är 00110101 och 11110000, blir resultatet 00110000. En vanlig användning av AND-operatorn är att nollställa vissa bitar i resultatet. Detta görs genom att placera nollor i dessa bitpositioner i en av operanderna.
I en ELLER-operation måste båda operandbitarna vara nollor för att resultatet ska bli noll; annars blir resultatet ett. En vanlig användning av OR-operatorn är att ställa in vissa bitar av resultatet till ettor. Detta görs genom att placera ettor i dessa bitpositioner i en av operanderna. För XOR-operationen är resultatet noll om båda operandbitarna är noll eller om båda operandbitarna är en – annars blir resultatet en.
Vänsterväxling och högerväxling flyttar bitarna i operanden åt vänster eller höger med det angivna antalet bitpositioner. En logisk högerväxling flyttar en nolla till biten längst till vänster som en del av skiftet. Ett aritmetiskt högerskifte kopierar biten längst till vänster – teckenbiten – före skiftet till samma position efter skiftet. Originalbiten skiftas också åt höger tillsammans med resten. Båda typerna av vänsterskift flyttar en nolla till biten längst till höger.
När en operand skiftas åt höger, slängs helt enkelt biten längst till höger innan skiftet. På liknande sätt kasseras biten längst till vänster innan ett vänsterskift. Den sveper sig inte runt till den andra änden av operanden.
Bitvisa skiftoperationer är språk- och implementeringsberoende. Till exempel i C och C++, >> och utför logiska skift om operanden är ett heltal utan tecken. Om operanden är ett heltal med tecken, är det troligt att ett aritmetiskt skift kommer att göras istället. I Java anses alla operander vara signerade, och aritmetiska skift utförs alltid med >> och . Operatören >>> används för ett logiskt högerskifte, men det är fortfarande möjligt att av misstag göra ett aritmetiskt högerskifte istället utan noggrann typcasting.
Komplikationer kan också uppstå när operander har olika bitlängder eller när några är signerade och några är osignerade. Bitvisa operatorer och numeriska konstanter i mitten av ett komplext uttryck kanske inte utvärderas som förväntat. Var noga med att specificera storlek och signerad/osignerad karaktär för varje kvantitet i uttrycket. Detta kan göras med noggrann typcasting eller interimistiska tilldelningar till specifika variabeltyper i programkod.