Windows.  Virus.  Bärbara datorer.  Internet.  Kontor.  Verktyg.  Förare

I den här artikeln kommer jag att berätta hur bitoperationer fungerar. Vid första anblicken kan de verka komplicerade och värdelösa för dig, men i verkligheten är det inte alls så. Detta är vad jag ska försöka övertyga dig om.

Introduktion

Bitvisa operatorer fungerar direkt på bitarna i ett tal, så talen i exemplen kommer att vara binära.

Jag kommer att täcka följande bitvisa operatorer:

  • | (Bitvis ELLER),
  • & (Bitvis OCH (OCH)),
  • ^ (Exklusiv ELLER (XOR)),
  • ~ (Bitvis negation (NOT)),
  • << (Побитовый сдвиг влево),
  • >> (Bitvis skift åt höger).

Bitoperationer studeras i diskret matematik och utgör också grunden för digital teknik, eftersom logiken för driften av logiska grindar - de grundläggande elementen - är baserad på dem digitala kretsar. Inom diskret matematik, som i digital teknik, används sanningstabeller för att beskriva hur de fungerar. Sanningstabeller, verkar det som, underlättar förståelsen av bitoperationer avsevärt, så jag kommer att presentera dem i den här artikeln. De används dock nästan aldrig i förklaringar av bitvisa operatorer i programmeringsspråk på hög nivå.

Du behöver också veta om bitoperatorer:

  1. Vissa bitvisa operatorer liknar de operatorer du förmodligen är bekant med (&&, ||). Detta beror på att de faktiskt är lika på vissa sätt. De bör dock inte förväxlas under några omständigheter.
  2. De flesta bitoperationer är sammansatta tilldelningsoperationer.

Bitvis ELLER

Bitvis OR fungerar ekvivalent med logiskt ELLER, men tillämpas på varje par av bitar i ett binärt tal. Den binära biten av resultatet är 0 endast när båda motsvarande bitar i är 0. I alla andra fall är det binära resultatet 1. Det vill säga om vi har följande sanningstabell:

38 | 53 blir så här:

A 0 0 1 0 0 1 1 0
B 0 0 1 1 0 1 0 1
A | B 0 0 1 1 0 1 1 1

Som ett resultat får vi 110111 2 eller 55 10.

Bitvis OCH

Bitvis AND är ungefär den motsatta operationen av bitvis ELLER. Den binära siffran i resultatet är 1 endast när båda motsvarande bitar av operanderna är lika med 1. Med andra ord kan vi säga att de binära siffrorna i det resulterande talet är resultatet av att multiplicera de motsvarande bitarna i operanden: 1x1 = 1, 1x0 = 0. Följande sanningstabell motsvarar bitvis OCH:

Ett exempel på att bitvis OCH arbeta med uttrycken 38 & 53:

A 0 0 1 0 0 1 1 0
B 0 0 1 1 0 1 0 1
A&B 0 0 1 0 0 1 0 0

Som ett resultat får vi 100100 2 eller 36 10.

Du kan använda den bitvisa AND-operatorn för att kontrollera om ett tal är jämnt eller udda. För heltal, om den minst signifikanta biten är 1, är talet udda (baserat på omvandlingen binära tal till decimal). Varför är detta nödvändigt om du bara kan använda %2? På min dator, till exempel, går &1 66% snabbare. En ganska bra prestationsboost, låt mig berätta.

Exklusiv ELLER (XOR)

Skillnaden mellan XOR och bitvis OR är att för att producera en 1, kan bara en bit i ett par vara en 1:

Till exempel kommer uttrycket 138^43 att vara lika med...

A 1 0 0 0 1 0 1 0
B 0 0 1 0 1 0 1 1
A^B 1 0 1 0 0 0 0 1

… 10100001 2 eller 160 10

Med ^ kan du ändra värdena för två variabler (som har samma datatyp) utan att använda en temporär variabel.

Du kan också kryptera text med exklusiva ELLER. För att göra detta behöver du bara iterera igenom alla tecken och ^ dem med nyckeltecknet. För ett mer komplext chiffer kan du använda en teckensträng:

String msg = "Detta är ett meddelande"; char meddelande = msg.toCharArray(); String nyckel = ".*)"; String encryptedString = new String(); for(int i = 0; i< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

Exklusiv ELLER inte mest pålitligt sätt kryptering, men det kan göras till en del av krypteringsalgoritmen.

Bitvis negation (INTE)

Bitvis negation inverterar alla bitar av operanden. Det vill säga att det som var 1 blir 0 och vice versa.

Till exempel, här är operation ~52:

A 0 0 1 1 0 1 0 0
~A 1 1 0 0 1 0 1 1

Resultatet blir 203 10

När du använder bitvis negation kommer tecknet för resultatet alltid att vara motsatt tecken på det ursprungliga talet (när man arbetar med tecken med tecken). Ta reda på varför detta händer just nu.

Tilläggskod

Här ska jag berätta lite om sättet att representera negativa heltal i en dator, nämligen om de tvås komplementkod. Utan att gå in på detaljer behövs det för att underlätta aritmetiken av binära tal.

Det viktigaste du behöver veta om siffror skrivna i tvås komplement är att den mest signifikanta biten är signerad. Om det är 0, så är talet positivt och sammanfaller med representationen av detta tal i direktkod, och om 1 är det negativt. Det vill säga 10111101 är ett negativt tal och 01000011 är ett positivt tal.

För att konvertera ett negativt tal till dess två-komplement måste du invertera alla bitar av talet (i huvudsak genom att använda bitvis negation) och lägga till 1 till resultatet.

Till exempel, om vi har 109:

A 0 1 1 0 1 1 0 1
~A 1 0 0 1 0 0 1 0
~A+1 1 0 0 1 0 0 1 1

Med ovanstående metod får vi -109 i tvås komplementkod.
En mycket förenklad förklaring av ytterligare kod har precis presenterats, och jag uppmuntrar dig starkt att studera detta ämne mer i detalj.

Växla bitvis åt vänster

Bitskiften skiljer sig något från de bitoperationer som diskuterats tidigare. En bitvis vänsterförskjutning skiftar bitarna i dess operande N antal bitar åt vänster, med början med den minst signifikanta biten. Tomma utrymmen efter skiftet fylls med nollor. Det händer så här:

A 1 0 1 1 0 1 0 0
A<<2 1 1 0 1 0 0 0 0

En intressant egenskap med att flytta vänster med N positioner är att det motsvarar att multiplicera talet med 2 N . Alltså 43<<4 == 43*Math.pow(2,4) . Использование сдвига влево вместо Math.pow обеспечит неплохой прирост производительности.

Växla bitvis åt höger

Som du kanske gissar, >> flyttar bitarna i operanden med ett specificerat antal bitar åt höger.

Om operanden är positiv fylls de tomma utrymmena med nollor. Om vi ​​initialt arbetar med ett negativt tal, fylls alla tomma utrymmen till vänster med ettor. Detta görs för att bevara skylten enligt tilläggskoden som förklarats tidigare.

Eftersom bitvis växling åt höger är den motsatta operationen till bitvis växling åt vänster, är det lätt att gissa att skiftning av ett tal åt höger med N antal positioner också dividerar det talet med 2 N . Återigen, detta är mycket snabbare än normal division.

Slutsats

Så nu vet du mer om bitoperationer och är inte rädd för dem. Jag kan anta att du inte kommer att använda >>1 varje gång du dividerar med 2. Bitoperationer är dock bra att ha i din arsenal, och nu kan du använda dem vid behov eller svara på en knepig intervjufråga.


Operatör Syntax Beskrivning
OCH A OCH B Samband: Om A och B har värde Sant, då - Sant. Annars - Falskt
ELLER A ELLER B Åtskiljande: Om någon av operanderna är True, då True. Annars - Falskt
INTE INTE A Negation: Om A är falskt är det sant. Annars - Falskt
XOR A XOR B Undantag: Om A är Sant eller B är Sant, då - Sant. Annars - Falskt
EQV A EQV B Likvärdighet: Om A har samma värde som B så är det Sant. Annars - Falskt
IMP A IMP B Inblandning: Om A är Sant och B är Falskt, då Falskt. Annars - sant

Operanden för en boolesk operator kan vara vilket giltigt uttryck som helst som har ett booleskt resultat, såväl som ett tal som kan konverteras till ett booleskt värde.

Resultatet av en logisk operation är ett värde av typen Boolean (eller Null om minst en av operanderna är Null).

Logisk operator AND

Syntax:
Operand_1 OCH Operand_2


AND-operatören utför logisk konjunktion.

Resultatet av denna operation är True endast när båda operanderna är True, annars False.


Sanningstabell


OCH-operatorn kan användas för flera operander:


(5 3) OCH (5=6) blir resultatet False


Oavsett antalet operander blir resultatet av den logiska AND-operationen True endast om alla operander i uttrycket evalueras till True. I alla andra fall blir resultatet False. Observera att operanderna är omgivna inom parentes. VBA utvärderar först värdet för varje operand inom parentesen och sedan hela uttrycket.

Logisk operator ELLER

Syntax:
Operand_1 ELLER Operand_2


OR-operatören gör det logisk disjunktion.

Resultatet av denna operation är True om minst en av operanderna är True, annars False.


Sanningstabell


OR-operatorn kan användas för flera operander:


(5 3) ELLER (5=6) resultatet blir Sant


Oavsett antalet operander kommer resultatet av den logiska ELLER-operationen alltid att vara Sant om åtminstone en av operanderna i uttrycket är Sant. Annars blir resultatet False.

OCH- och ELLER-operatorerna kan kombineras:


((5 3)) ELLER (5=6) resultatet blir Sant

Logisk operator INTE

Syntax:
INTE operand


NOT-operatören gör det logisk negation.

NOT-operatorn använder bara en operand.


Sanningstabell


OCH ELLER EJ-operatorer kan kombineras:


((5 3)) ELLER INTE (5=6) blir resultatet Sant

Logisk operator XOR

Syntax:
Operand_1 XOR Operand_2


XOR-operatören gör det logiskt undantag.

Resultatet av denna operation är True om operanderna har olika värden, annars False.


Sanningstabell


((5 3)) ELLER INTE (5=6) XELLER (5=5) resultatet blir falskt

Logisk operator EQV

Syntax:
Operand_1 EQV Operand_2


EQV-operatören är operatören logisk motsvarighet.

Resultatet av denna operation är True om operanderna har samma värden, annars False.


Sanningstabell


((5 3)) ELLER INTE (5=6) EQV (5=5) resultatet blir Sant

Logisk operatör IMP

Syntax:
Operand_1 IMP Operand_2


IMP-operatören utför en logisk operation implikationer.


Sanningstabell


((5 3)) ELLER INTE (5=6) IMP (5=5) resultatet blir Sant


Den logiska IMP-operatorn är den minst intuitiva av alla logiska operatorer. Lyckligtvis förekommer behovet av att använda det ganska sällan.

Indikeras av figuren "antingen... eller..." Det sammansatta påståendet "antingen A eller B" är sant när antingen A eller B är sant, men inte båda; annars är det sammansatta uttalandet falskt.

Dessa. resultatet är sant (lika med 1), Om A är inte lika med B (A≠B).

Denna operation jämförs ofta med disjunktion eftersom de är väldigt lika i egenskaper och båda har likheter med konjunktionen "eller" i dagligt tal. Jämför reglerna för dessa operationer:

1. sant om sant eller , eller båda på en gång.

2. sant om sant eller, Men Inte båda på en gång.

Drift utesluter det senare alternativet ("båda på en gång") och av denna anledning kallas exklusivt "ELLER". Tvetydighet naturligt språk är att konjunktionen "eller" kan användas i båda fallen.

5. Implikation (logisk konsekvens) bildas genom att kombinera två påståenden till ett med hjälp av figuren "om ... då ...".

Inspelning: A®B

Ett sammansatt uttalande bildat av implikationsoperationen är falskt om och endast om en falsk slutsats (andra påståendet) följer av en sann premiss (det första påståendet).

Dessa. om 1 innebär 0, så är resultatet 0, i andra fall – 1.

Till exempel, påståendet "Om ett tal är delbart med 10 så är det delbart med 5" är sant eftersom både det första och det andra påståendet är sanna.

Påståendet "Om ett tal är delbart med 10 så är det delbart med 3" är falskt eftersom en falsk slutsats dras från en sann premiss.

"Denna fyrhörning är en kvadrat" (A) Och "En cirkel kan omskrivas runt en given fyrhörning" (I). Då lyder det sammansatta uttalandet som "Om en given fyrhörning är en kvadrat, kan en cirkel ritas runt den."

I vanligt tal den bindande "om... då" beskriver orsak och verkan mellan påståenden. Men i logiska operationer beaktas inte betydelsen av uttalanden. Endast deras sanning eller falskhet beaktas. Därför bör man inte skämmas över "meningslösheten" i implikationer som bildas av uttalanden som är helt orelaterade till innehåll. Till exempel, så här: "om USA:s president är en demokrat, så finns det giraffer i Afrika," "om en vattenmelon är ett bär, så finns det bensin på bensinstationen."

6. Ekvivalens (logisk jämlikhet, ~ º Û) bildas genom att kombinera två påståenden till ett med hjälp av figuren "...om och bara om..."

Ett sammansatt påstående bildat av en ekvivalensoperation är sant om och endast om båda påståendena samtidigt är antingen falska eller sanna.

Till exempel är påståendena "En dator kan beräkna om och bara om den är påslagen" och "En dator kan inte beräkna om och endast om den inte är på" är sanna eftersom båda enkla påståendena är sanna samtidigt.


Sanningstabeller

För varje sammansatt påstående (logisk funktion) är det möjligt att konstruera en sanningstabell som bestämmer dess sanning eller falskhet för alla möjliga kombinationer av initialvärdena för enkla påståenden.

Sanningstabellär en tabellrepresentation av en logisk krets (operation) som listar alla möjliga kombinationer av sanningsvärden ingångssignaler(operander) tillsammans med sanningsvärdet för utsignalen (resultatet av operationen) för var och en av dessa kombinationer.

Låt oss reflektera ovan diskuterade logiska operationer i sanningstabellen:

I propositionalgebra kan alla logiska funktioner genom logiska transformationer reduceras till tre grundläggande: logisk addition, logisk multiplikation och logisk negation.

Låt oss bevisa att implikationsoperationen A®B är ekvivalent med det logiska uttrycket:

Ofta, för att visa den begränsade förmågan hos enskiktsperceptroner när de löser problem, tar de ofta till att överväga det så kallade problemet XOR – exklusivt ELLER.

Kärnan i uppgiften är som följer. Den logiska funktionen XOR ges - exklusivt ELLER. Det är en funktion av två argument, som vart och ett kan vara noll eller ett. Det tar värdet , när ett av argumenten är lika med ett, men inte båda, annars . Problemet kan illustreras med ett enkellagers, en neuron, två-ingångssystem, som visas i figuren nedan.

Låt oss beteckna en ingång med , och den andra med , då kommer alla deras möjliga kombinationer att bestå av fyra punkter på planet. Tabellen nedan visar det erforderliga förhållandet mellan ingångar och utdata, där ingångskombinationer som ska ge en nollutdata är märkta och , en enda utdata är märkt och .

Poäng Menande Menande Obligatorisk utgång
0 0 0
1 0 1
0 1 1
1 1 0

En neuron med två ingångar kan bilda en beslutsyta i form av en godtycklig rät linje. För att nätverket ska kunna implementera XOR-funktionen som anges i tabellen ovan måste du placera linjen så att punkterna är på ena sidan av linjen och punkterna på den andra. Efter att ha försökt rita en sådan rak linje i figuren nedan är vi övertygade om att detta är omöjligt. Detta betyder att oavsett vilka värden som tilldelas vikterna och tröskeln, kan ett neuralt nätverk i ett lager inte reproducera det input-output-förhållande som krävs för att representera XOR-funktionen.

XOR-funktionen bildas dock lätt av ett tvåskiktsnätverk, och på många sätt. Låt oss överväga en av dessa metoder. Låt oss modernisera nätverket i figuren genom att lägga till ytterligare ett dolt lager av neuroner:

Observera att detta nätverk ges i befintligt skick, dvs. vi kan anta att hon redan är utbildad. Siffrorna ovanför pilarna visar värdena för synaptiska vikter. Som en aktiveringsfunktion kommer vi att använda en enkel hoppfunktion med en tröskel som har följande graf:

Sedan kan resultatet av driften av ett sådant neuralt nätverk presenteras i form av följande tabell:

Poäng Menande Menande Obligatorisk utgång
0 0 0 0 0 0
1 0 1 1 0 1
0 1 1 0 1 1
1 1 0 0 0 0

Var och en av de två neuronerna i det första lagret bildar en beslutsyta i form av en godtycklig rät linje (delar planet i två halvplan), och neuronen i det utgående lagret kombinerar dessa två lösningar och bildar en beslutsyta i form av en remsa bildad av parallella raka linjer av nervcellerna i det första lagret:

Det neurala nätverk som används i den här artikeln för att lösa XOR-problemet är primitivt och drar inte full nytta av flerskiktsnätverkens möjligheter. Självklart flerlager neurala nätverk har större representerande kraft än enlagers endast i närvaro av olinjäritet. Och i detta nätverk tillämpas en linjär aktiveringsfunktion för tröskelvärden. Ett sådant nätverk kan inte tränas, till exempel med hjälp av en backpropagation-algoritm.

I praktiken är de vanligaste tvåinmatningselementen "exklusiva ELLER". I fig. 1 visas villkorad grafisk beteckning element utan inversion och dess tillståndstabell. Enkelt uttryckt, kärnan i detta element kokar ner till följande: utsignalen visas endast när de logiska nivåerna vid ingångarna inte är desamma.

Schema för att identifiera kanten och cutoff av en puls

I denna krets används tre XOR-grindar för att fördröja pulserna. DD1.4 - summering. Utgångspulser har stabila framkanter och fallande flanker. Varaktigheten av varje utgångspuls är lika med tredubbla kopplingsfördröjningstiden för vart och ett av de tre elementen. Tidsintervallet mellan utgångspulsernas kanter är lika med varaktigheten av ingångspulsen. Denna enhet fördubblar också insignalens frekvens.

Det finns en annan intressant egenskap som heter "Exclusive OR". Om en konstant "0" appliceras på en av ingångarna, kommer signalen vid elementets utgång att upprepa insignalen, och om konstanten "0" ändras till en konstant "1", kommer utsignalen att redan vara en inversion av ingångssignalen.

Ibland blir det nödvändigt att erhålla en "exklusiv ELLER"-grind från individuella logiska standardgrindar. Ett exempel är den "exklusiva ELLER"-elementkretsen implementerad på fyra 2-AND-NOT-element. Figur 3 visar en XOR-krets i dess fyra tillstånd. Detta visar alla möjliga logiska nivåer vid var och en av de 2-NAND logiska grindarna som används.

Sådana element ingår i diagrammet. I denna krets är "Exclusive OR"-elementet tillverkat av fyra 2-AND-NOT-element som ingår i ett paket av K561LA7-mikrokretsen.

Formare diskret signal med skillnadsfrekvens

Drivkretsen visas i figur 4. Här är det exklusiva ELLER-logikelementet också implementerat på fyra 2-AND-NOT-element.

Rektangulära pulser faller vid ingångarna 1 och 2 på formaren (se diagram 1 och 2), som skiljer sig i repetitionsfrekvens. En nod baserad på logiska element DD1.1-DDI.4 multiplicerar dessa signaler. Utgångspulssignalen (graf 3) från element DD1.4 matas till den integrerande kretsen R3, C1, som omvandlar den till en triangulär signal (graf 4) med en frekvens lika med skillnaden i frekvenser för insignalerna, och op -amp DA1 omvandlar den mottagna signalen till en fyrkantsvåg (se schema 5). Motstånd R1 reglerar varaktigheten av de positiva och negativa halvvågorna för utsignalen. Ett mycket intressant upplägg. Radiodesignern har något att tänka på. Till exempel är signalen som visas i den tredje grafen en sinusvåg PWM-signal.
Naturligtvis är användningsområdet för "exklusiva ELLER"-element mycket bredare. Jag har här presenterat, enligt min mening, mer intressant för radioamatörer.



Om du upptäcker ett fel markerar du ett textstycke och trycker på Ctrl+Enter
DELA: