Wat zijn bitgewijze operators?
In een computerprogramma zijn bitgewijze operators operators voor het manipuleren van bitpatronen in uitdrukkingen. Bitgeise en, of, exclusief of (xor), niet, rechter shift en linker shift zijn gemeenschappelijke bewerkingen. De meeste computerprogrammeertalen omvatten alle zes van deze operators. Ze worden vaak gebruikt voor het instellen, wissen of omdraaien van individuele bits in programma's die computerhardware besturen. Bitgewijze operatoren worden ook vaak gebruikt in gegevenscodering en compressie -algoritmen.
De gemeenschappelijke bitgewijze operators worden meestal symbolisch weergegeven in programmeertalen zoals C, C ++ en Java. Ze worden gebruikt in uitdrukkingen, net zoals rekenkundige operators zoals plus of min -borden zouden zijn. De bitgewijze operator en wordt weergegeven met de ampersand & , of met de pijp | en xor met de caret ^. Niet, ook bekend als de complementoperator, wordt aangegeven met een tilde ~ .
De rechter shift-operator gebruikt een dubbele caret die naar rechts wijst >> . Daarentegen,Links shift wordt aangegeven door een links-pointing dubbele caret <<. Java bevat een andere rechter shift-bewerking, getoond met een rechtspower triple-caret >>> .
Bitwise-operators passen een logische bewerking toe op elk paar bits in hun operanden. Niet, rechter shift en linker shift hebben slechts één ware operand; De tweede waarde in shift -bewerkingen is de bittelling. Om beter te begrijpen hoe bitgewijze operators werken, kan een persoon zijn operanden visualiseren als binaire cijfers. De complement -operator draait bijvoorbeeld elk stukje van zijn enkele operand naar de tegenovergestelde staat. Een wordt een nul en een nul wordt een. Het complement van de 8-bit binaire waarde 00110101 is 11001010.
De en operator heeft twee operanden. Beetje bij beetje wordt een logische en bewerking uitgevoerd met behulp van een overeenkomstig bit uit elke operand. De uitkomst van elke bitbewerking wordt in die bitpositie van de overall geplaatstresultaat. De en operator 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 algemene resultaat.
In een en operatie moeten beide operandbits er zijn om het resultaat één te hebben, anders is het resultaat nul. Als bijvoorbeeld de 8-bit binaire waarden van de operanden 00110101 en 11110000 zijn, is het resultaat 00110000. Een gemeenschappelijk gebruik van de en operator is om bepaalde bits in het resultaat te nul. 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 hebben; Anders is het resultaat er één. Een gemeenschappelijk gebruik van de OK -operator is om bepaalde bits van het resultaat op die te stellen. Dit wordt gedaan door die 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 er een.
Left Shift ARechts verschuiving verplaatst de bits in de operand links of rechts door het opgegeven aantal bitposities. Een logische rechterverschuiving verplaatst een nul in het meest linkse bit als onderdeel van de verschuiving. Een rekenkundige rechterverschuiving kopieert het meest linkse bit - het tekenbit - voordat de verschuiving naar dezelfde positie na de verschuiving. Het originele bit wordt ook verschoven samen met de rest. Beide type links shift beweegt een nul in het meest rechtse bit.
Wanneer een operand rechts is verschoven, is het rechtsbegin voordat de verschuiving eenvoudig wordt weggegooid. Evenzo wordt het meest linkse stukje voordat een linkerverschuiving wordt verwijderd. Het wikkelt niet rond het andere uiteinde van de operand.
Bitwise shift-bewerkingen zijn taal- en implementatie-afhankelijk. Bijvoorbeeld, in C en C ++, >> en << Voer logische verschuivingen uit als de operand een niet -ondertekend geheel getal is. Als de operand een ondertekend geheel getal is, is het waarschijnlijk dat in plaats daarvan een rekenkundige verschuiving zal worden gedaan. In Java worden alle operanden beschouwd als ondertekend en rekenenEtische verschuivingen worden altijd uitgevoerd met >> en <<. De operator >>> wordt gebruikt voor een logische rechterverschuiving, maar het is nog steeds mogelijk om in plaats daarvan per ongeluk een rekenkundige rechterverschuiving te doen zonder zorgvuldige typecasting.
Complicaties kunnen ook ontstaan wanneer operanden verschillende bitlengtes hebben of wanneer sommige zijn ondertekend en sommige niet zijn ondertekend. Bitgewijze operatoren en numerieke constanten in het midden van een complexe expressie mogen niet worden geëvalueerd zoals verwacht. Er moet voor worden gezet om de grootte en ondertekende/niet -ondertekende aard van elke hoeveelheid in de uitdrukking te specificeren. Dit kan worden gedaan met zorgvuldige typecasting of tussentijdse opdrachten aan specifieke variabele typen in programmacode.