Hva er bitvis operatører?
I et dataprogram er bitvis operatører operatører for å manipulere bitmønstre i uttrykk. Bitvis og, eller eksklusiv eller (xor), ikke, høyre skift og venstre skift er vanlige operasjoner. De fleste dataprogrammeringsspråk inkluderer alle seks av disse operatørene. De brukes ofte til å sette, rydde eller snu individuelle biter i programmer som kontrollerer datamaskinvare. Bitvise operatører brukes også ofte i datakryptering og kompresjonsalgoritmer.
De vanlige bitvise operatørene er vanligvis representert symbolsk i programmeringsspråk som C, C ++ og Java. De brukes i uttrykk akkurat som aritmetiske operatører som pluss eller minustegn ville være. Den bitvis operatøren og er representert med Ampersand & , eller med røret | og XOR med Caret ^. Ikke, også kjent som komplementoperatøren, er indikert med en tilde ~ .
Høyre skiftoperatør bruker en dobbeltkaret som peker til høyre >> . I kontrast,Venstre skift indikeres med en venstre-pekende dobbeltkaret <<. Java inkluderer en annen høyre skiftoperasjon, vist med en høyre-pekepinnende trippelkaret >>> .
Bitvis operatører bruker en logisk operasjon til hvert par biter i sine operander. Ikke, høyre skift og venstre skift har bare en ekte operand; Den andre verdien i skiftoperasjoner er bittellingen. For bedre å forstå hvordan bitvise operatører fungerer, kan en person visualisere operandene sine som binære tall. For eksempel vipper komplementoperatøren hver bit av sin enkelt operand til motsatt tilstand. En blir en null og null blir en. Komplementet til 8-biters binære verdi 00110101 er 11001010.
og operatøren har to operander. Bit etter bit utføres en logisk og operasjon ved hjelp av en tilsvarende bit fra hver operand. Resultatet av hver bitoperasjon er plassert i den bitposisjonen til totalenresultat. For eksempel vil og operatøren behandle bit 7 av en operand med bit 7 av den andre operanden. Utfallet vil bli lagret i bit 7 av det samlede resultatet.
I en og operasjon må begge operandbitene være de for at resultatet skal være ett, ellers er resultatet null. For eksempel, hvis de 8-biters binære verdiene til operandene er 00110101 og 11110000, vil resultatet være 00110000. En vanlig bruk av og operatøren er til null ut bestemte biter i resultatet. Dette gjøres ved å plassere nuller i de bitposisjonene i en av operandene.
I en eller operasjon må begge operandbitene være nuller for at resultatet skal være null; Ellers er resultatet ett. En vanlig bruk av OR -operatøren er å sette visse biter av resultatet til dem. Dette gjøres ved å plassere dem i de bitposisjonene i en av operandene. For XOR -operasjonen er resultatet null hvis begge operandbitene er null eller hvis begge operandbitene er en - ellers er resultatet en.
Venstre skift aog høyre skift Flytt bitene i operanden til venstre eller høyre med det angitte antall bitposisjoner. Et logisk høyre skift beveger seg et null til venstre som en del av skiftet. En aritmetisk høyre skift kopierer den venstre biten - skiltbiten - før skiftet til samme posisjon etter skiftet. Den opprinnelige biten er også forskjøvet rett sammen med resten. Enten type venstre skift beveger seg null til høyre bit.
Når en operand er rettskiftet, blir den høyre biten før skiftet ganske enkelt kastes. Tilsvarende blir den venstre biten før et venstre skift avhendes. Den vikler ikke rundt til den andre enden av operanden.
Bitvis skiftoperasjoner er språk- og implementeringsavhengige. For eksempel i C og C ++, >> og << utfør logiske skift hvis operanden er et usignert heltall. Hvis operanden er et signert heltall, er det sannsynlig at et aritmetisk skifte vil bli gjort i stedet. I Java regnes alle operander som signert og aritmeEtiske skift utføres alltid med >> og <<. >>> -operatøren brukes til et logisk riktig skift, men det er fremdeles mulig å ved et uhell gjøre et aritmetisk høyre skift i stedet uten nøye typecasting.
Komplikasjoner kan også oppstå når operander har forskjellige bitlengder eller når noen er signert og noen er usignerte. Bitvise operatører og numeriske konstanter midt i et komplekst uttrykk kan ikke evalueres som forventet. Det må utvises forsiktighet for å spesifisere størrelsen og signert/usignert karakter av hver mengde i uttrykket. Dette kan gjøres med nøye typekasting eller midlertidige oppgaver til spesifikke variable typer i programkode.