Wat zijn Bitwise-operators?
In een computerprogramma zijn bitsgewijze operatoren operatoren voor het manipuleren van bitpatronen in expressies. Bitwise AND, OF, exclusive OR (XOR), NOT, shift naar rechts en naar links zijn veel voorkomende bewerkingen. De meeste computerprogrammeertalen omvatten alle zes van deze operatoren. Ze worden vaak gebruikt voor het instellen, wissen of omdraaien van afzonderlijke bits in programma's die computerhardware besturen. Bitwise-operators worden ook vaak gebruikt in gegevenscodering en compressiealgoritmen.
De gebruikelijke bitsgewijze operatoren worden meestal symbolisch weergegeven in programmeertalen zoals C, C ++ en Java. Ze worden gebruikt in uitdrukkingen, net zoals rekenkundige operatoren zoals plustekens of mintekens. De bitsgewijze operator AND wordt weergegeven met het en-teken & , OF met de pijp | en XOR met de caret ^ . NIET, ook bekend als de complement-operator, wordt aangegeven met een tilde ~ .
De rechter shift-operator gebruikt een dubbele punt naar rechts >> . De linkerverschuiving wordt daarentegen aangegeven door een naar links wijzende dubbele kruisje << . Java omvat nog een bewerking naar rechts verschuiven, weergegeven met een naar rechts wijzende drievoudige-caret >>> .
Bitwise-operatoren passen een logische bewerking toe op elk paar bits in hun operanden. NIET, shift rechts en shift links hebben slechts één echte operand; de tweede waarde in shift-bewerkingen is het aantal bits. Om beter te begrijpen hoe bitsgewijze operatoren werken, kan een persoon zijn operanden visualiseren als binaire cijfers. De complement-operator draait bijvoorbeeld elk bit van zijn enkele operand naar de tegenovergestelde toestand. Een wordt een nul en een nul wordt een. Het complement van de 8-bit binaire waarde 00110101 is 11001010.
De operator AND heeft twee operanden. Bit voor bit wordt een logische EN-bewerking uitgevoerd met behulp van één corresponderend bit van elke operand. Het resultaat van elke bitbewerking wordt in die bitpositie van het totale resultaat geplaatst. De operator AND zal bijvoorbeeld bit 7 van de ene operand verwerken met bit 7 van de andere operand. De uitkomst wordt opgeslagen in bit 7 van het totale resultaat.
In een EN-bewerking moeten beide operandbits enen zijn om het resultaat één te maken, anders is het resultaat nul. Als de 8-bits binaire waarden van de operanden bijvoorbeeld 00110101 en 11110000 zijn, is het resultaat 00110000. Een algemeen gebruik van de operator AND is om bepaalde bits in het resultaat op nul te zetten. Dit wordt gedaan door nullen in die bitposities in een van de operanden te plaatsen.
In een OF-bewerking moeten beide operandbits nullen zijn om het resultaat nul te laten zijn; anders is het resultaat één. Een gebruikelijk gebruik van de operator OF is om bepaalde bits van het resultaat in te stellen op die. Dit wordt gedaan door degenen in die bitposities in een van de operanden te plaatsen. Voor de XOR-bewerking is het resultaat nul als beide operandbits nul zijn of als beide operandbits één zijn - anders is het resultaat één.
Shift naar links en Shift naar rechts verplaatsen de bits in de operand naar links of rechts met het opgegeven aantal bitposities. Een logische rechterschuiving verplaatst een nul naar het meest linkse bit als onderdeel van de verschuiving. Een rekenkundige rechtsverschuiving kopieert het meest linkse bit - het tekenbit - vóór de shift naar dezelfde positie na de shift. Het originele bit is ook naar rechts verschoven samen met de rest. Beide typen links verschuiven verplaatst een nul naar het meest rechtse bit.
Wanneer een operand naar rechts wordt verschoven, wordt het meest rechtse bit vóór de verschuiving eenvoudig weggegooid. Op dezelfde manier wordt het meest linkse bit verwijderd voordat een linkerverschuiving wordt verwijderd. Het loopt niet rond naar het andere uiteinde van de operand.
Bitwise shift-bewerkingen zijn taal- en implementatieafhankelijk. In C en C ++ voeren >> en << bijvoorbeeld logische verschuivingen uit als de operand een geheel getal zonder teken is. Als de operand een geheel getal met teken is, is het waarschijnlijk dat in plaats daarvan een rekenkundige verschuiving wordt uitgevoerd. In Java worden alle operanden als ondertekend beschouwd en worden rekenkundige verschuivingen altijd uitgevoerd met >> en << . De operator >>> wordt gebruikt voor een logische rechtsverschuiving, maar het is nog steeds mogelijk om per ongeluk een rekenkundige rechtsverschuiving uit te voeren zonder zorgvuldige typecasting.
Complicaties kunnen ook optreden wanneer operanden verschillende bitlengten hebben of wanneer sommige zijn ondertekend en sommige niet zijn ondertekend. Bitsgewijze operatoren en numerieke constanten in het midden van een complexe uitdrukking worden mogelijk niet geëvalueerd zoals verwacht. Zorg ervoor dat u de grootte en de ondertekende / niet-ondertekende aard van elke hoeveelheid in de uitdrukking opgeeft. Dit kan met zorgvuldige typecasting of tussentijdse toewijzingen aan specifieke variabeletypen in programmacode.