Vi vil også forklare hvordan du utfører bitmaskering med logiske operasjoner, da dette er noe veldig nyttig i programmering og er helt relatert til denne typen operatører.
Beskrivelse av bitvis operasjoner
Operasjonene bitvis er logiske og skiftoperasjoner brukes individuelt på hver bit av en variabel. For eksempel, hvis vi bruker operasjonen og mellom variablene “A” og “B”, vil bit 0 av “A” være koblet til bit 0 av “B”, vil bit 1 av “A” være koblet til bit 1 av “B” “, og så videre.
Hver bit opererer og returnerer sitt eget resultat og har ingen innflytelse på resultatet av bitene ved siden av.
Denne typen operasjoner er veldig nyttig i maskeringsbiter når du bruker kontrollflagg eller indikatorer gruppert i et enkelt dataelement, for eksempel et heltall.
Hvordan tilordne en binær verdi til en variabel på C -språket
Før vi begynner å forklare hvilke bitvise logiske operasjoner som handler om, la oss se på hvordan vi kan tilordne en verdi til en variabel i binær kode, selv om vi kan gjøre dette i desimal, heksadesimal eller annen representasjon, gjør det å visualisere 1S og 0 -er programmering mye mer praktisk og forståelig. For eksempel i tilfeller der bitene representerer kontrollflagg eller indikatorer gruppert i en int, dobbel eller annen variabel.
For å tilordne en verdi til en variabel i binært format, må vi prefiksere den binære representasjonen med “0b”. Følgende utdrag tilordner verdien 131 eller 0B10000011 til heltallet “A” i binært format og viser deretter sin desimalrepresentasjon i kommandokonsollen.
#inkludereBildet nedenfor viser resultatet for denne koden.
Å representere binære verdier i bitvis og maskering av programmering gjør mye mer flytende og forståelig og unngår feil eller konverteringer som koster tid.
Ikke operatør
Den logiske operatøren for ikke er symbolet "~".
Den logiske ikke eller negasjonsoperasjonen er den enkleste av alle, og har bare en inngang og en utgang.
Denne operasjonen kommer tilbake i sin output den omvendte binære verdien av inngangen.
Tenk på følgende uttrykk for den logiske operasjonen ikke med inngangen “A”
c = ~ aResultatet i “C” er lik 1 hvis “A” er lik 0 og “C” er lik 0 hvis “A” er lik 1. Denne operasjonen brukes ofte for å oppnå den komplementære verdien av en variabel.
La oss deretter se på sannhetsbordet for ikke -operasjonen.
en | ~ | = | c |
0 | ~ | = | 1 |
1 | ~ | = | 0 |
Eksempel:
I dette eksemplet vil vi bruke operasjonen ikke på variabelen A for å få sin komplement i “C”
For å gjøre dette oppretter vi variabelen A av typen usignert røye, tilordner den verdien 131 og får resultatet i “C”. Vi bruker deretter printf () -funksjonen for å vise resultatet i kommandokonsollen. Nedenfor kan vi se koden for dette formålet.
#inkludereI figuren nedenfor ser vi resultatet av komplementet til “A” . I dette tilfellet er komplementet eller inverse av 131 124 eller 01111100 i binær representasjon.
Logisk og operatør
Den logiske operatøren for og operasjonen er symbolet “&”
La oss se på følgende uttrykk for logisk og drift mellom variablene A og B
C = A & B.Resultatet i “C” er lik 1 bare hvis “A” og “B” er lik 1. I alle andre tilfeller er “C” lik 0.
Deretter ser vi på sannhetstabellen for operasjonen og.
EN | Og | b | = | c |
0 | Og | 0 | = | 0 |
0 | Og | 1 | = | 0 |
1 | Og | 0 | = | 0 |
1 | Og | 1 | = | 1 |
Den logiske operasjonen og er veldig nyttig i bitmaskering. Senere vil vi se et avsnitt som forklarer denne teknikken mer detaljert.
Eksempel:
La oss nå se et eksempel der vi utfører den logiske og driften mellom variablene “A” og “B” av typen usignert røye og lagrer resultatet i “C” for å vise det senere i kommandokonsollen.
Vi tildeler verdien 135 eller 10000111 til variabelen “A” og 129 eller 1000001 til variabelen “B” i binær representasjon. Deretter vil vi bruke operatøren "&" "til å utføre operasjonen. Deretter vil vi se koden for dette.
#inkludereBildet viser resultatet av denne koden der og driften mellom “A” og “B” resulterer i 129 eller 10000001 i binær.
Logisk eller operatør
Den logiske operatøren for OR -operasjonen er symbolet ”| “.
La oss se på følgende uttrykk for logisk eller drift mellom variablene A og B
c = til | b.Resultatet i “C” vil være lik 1 bare hvis “A” eller “B” eller “A” og “B” lik 1, mens det bare vil være 0 bare hvis "A" og "B" begge er lik 0.
La oss deretter se på sannhetstabellen for OR -operasjonen.
til | | | b | = | c |
0 | | | 0 | = | 0 |
0 | | | 1 | = | 1 |
1 | | | 0 | = | 1 |
1 | | | 1 | = | 1 |
Eksempel
I dette eksemplet vil vi se hvordan du utfører den logiske operasjonen eller mellom variablene ”A” og “B” av typen usignert røye og lagrer resultatet i “C” for å vise den senere i kommandokonsollen.
Vi tildeler verdien 128 eller 10000000 til variabelen “A” og 3 eller 00000011 til variabelen “B” i binær representasjon. Deretter vil vi bruke operatøren “|” til å utføre operasjonen. Deretter vil vi se koden for denne operasjonen.
#inkluderePå bildet nedenfor ser vi resultatet av operasjonen C = A | B som i dette tilfellet er 131 eller 10000011 i binær.
Logisk operatør XOR eller eksklusiv eller
Den logiske operatøren for XOR -operasjonen er symbolet ” ^“.
La oss se på følgende uttrykk for den logiske XOR -operasjonen mellom variablene A og B
c = a ^ b.Resultatet i “C” er lik 1 bare hvis en av bitene “A” eller “B” er lik 1, men det er 0 hvis “A” og “B” begge er lik 1 eller lik 0.
Denne operasjonen er essensiell i Adders fordi i binært system 1 + 0 = 1 eller 0 + 1 er også lik 1. Men 1 + 1 = 0 med bære til neste høyere bit. I dette tilfellet utføres gjennomføringen av operasjonen og.
Deretter ser vi på sannhetstabellen for XOR -operasjonen.
en | ^ | b | = | c |
0 | ^ | 0 | = | 0 |
0 | ^ | 1 | = | 1 |
1 | ^ | 0 | = | 1 |
1 | ^ | 1 | = | 0 |
Eksempel
La oss nå se på et eksempel der vi utfører den logiske XOR -operasjonen mellom variablene ”A” og “B” av typen usignert røye og lagrer resultatet i “C” for å vise den senere i kommandokonsollen.
Vi tildeler verdien 135 eller 10000111 til variabelen “A” og 3 eller 00000011 til variabelen “B” i binær notasjon. Deretter vil vi bruke " ^" -operatøren til å utføre den logiske operasjonen. Deretter vil vi se koden for dette.
#inkludereSom vi kan se på bildet, er resultatet 10000100 og bitene hvis to innganger er = 1 xor resulterer i 0.
Operatører med oppgave
Operatørene med oppdrag utfører de samme logiske operasjonene som vi så før, men resultatet er lagret i operanden som går foran operatøren.
Følgende uttrykk utfører logisk og drift mellom variabelen “A” og variabelen eller verdien som er tilordnet etter operatøren, og resultatet returneres i “A”.
A & = 55;Rotasjonsoperatører
Rotasjonsoperatørene er “< > “.
Disse operatørene forskyver dataene til en variabel med henholdsvis "n" biter til venstre eller høyre.
I det følgende uttrykket forskyver operatøren dataene som er lagret i “A” 5 biter til venstre.
a = a < < 5Eksempel
I dette eksemplet vil vi tilordne verdien 0B000001 til variabelen “A” og deretter skifte 1 bit til venstre i en for sløyfe og sende ut den resulterende verdien i kommandokonsollen. Denne syklusen gjentas 8 ganger
#inkludereI det følgende bildet ser vi resultatet med desimalverdiene som tilsvarer hver plassering av bitene i en usignert karakter.
Bit maskering
I visse tilfeller, for eksempel når vi definerer flere kontrollflagg gruppert i et enkelt register, trenger vi bare å vite eller endre verdien på en eller flere biter, ikke hele registeret.
For å få status som en eller flere spesifikke biter, må vi definere en maske som bare setter bitene til elementene hvis verdi vi vil vite til 1 og bruke og operasjonen.
For eksempel, hvis vi ønsker å få verdien av bitene 0 og 2 av variabel “A”, må vi definere følgende maske og utføre og driften.
00000101I dette tilfellet vil bare statusen til bitene 0 og 2 bli returnert som et resultat, de gjenværende bitene vil ha verdien = 0, uavhengig av hvilken verdi de har “a”.
For å endre verdien, må vi bruke eller driften mellom masken med bitene vi ønsker å sette til 1 og variabelen vi ønsker å endre. Hvis vi ønsker å sette den til 0, må vi invertere masken som vist nedenfor og bruke og operasjonen.
11111010Eksempel
I dette eksemplet bruker vi bitmaskering for å lage en enkel og praktisk omformer fra desimaltall til en streng med sin binære representasjon.
For denne samtalen vil vi bruke 8 masker, en for hver bit, men for å gjøre programmeringen mer praktisk og tydeligere, vil vi først bruke masken 10000000 og deretter flytte en bit til høyre i hver syklus av løkken. På denne måten vil vi få følgende 8 masker som vi trenger.
10000000Omformeren består av en for loop med 8 sykluser, hvorav den spør om statusen til den tilsvarende bit. Dette gjøres av en og drift mellom dataene som skal konverteres og den tilsvarende masken.
Hvis resultatet av operasjonen i "C" er 0, kan du sende ut denne verdien med printf () -funksjonen. Ellers, hvis verdien av biten er 1, vil den bli skrevet ut i kommandokonsollen.
Nedenfor er koden for denne praktiske omformeren.
#inkludereI det følgende bildet ser vi nedenfor resultatet av konverteringen for nummeret 143.
Konklusjon
I dette Linux hint Artikkel, vi har forklart hver av de logiske og rotasjonsoperatørene som C -språket gir for bitvis behandling. For hver av disse operatørene har vi laget en seksjon som viser symbolet som brukes til den operatørbeskrivelsen og et praktisk eksempel med kodebiter og bilder for hver. Vi har også tatt med en seksjon som omhandler bitmaskering og hva som er et tillegg, som er helt relatert til logiske operasjoner av denne typen.