Eksklusiivne või c. Näide XOR-i probleemi lahendamisest - eksklusiivne VÕI. Näiteid nihkeoperatsioonide kasutamisest programmis

Kõige lihtsamad loogilised toimingud

Lihtsamad loogikatehted kuuluvad kaheväärtusliku loogika alla. Neid on 4: “EI”, “JA”, “VÕI”, “XOR”. Samuti kasutatakse nende toimingute tähistamiseks erinevaid sümboleid (“~”, “&” jne).

Loogiliste valemite kirjutamisel kasutatakse sõnade "tõene" ja "vale" asemel tavaliselt standardseid rahvusvahelisi tähiseid:
"Tõene" asemel kirjutavad nad: tõsi, T, t, 1.
"Vale" asemel kirjutavad nad: false, F, f, 0.

"MITTE"

Toiming „EI” teisendab tõese vääraks ja väära tõeseks:

EI ole tõsi = vale
EI ole vale = tõsi

Sellel toimingul on mitmeid teisi nimetusi: "loogiline EI", "eitamine", "loogiline eitus", "inversioon", "loogiline inversioon". Rahvusvaheliste tähiste puhul kirjutatakse "EI" asemel "EI".

Loomulikus keeles vastab see tehe sõnade “pole tõsi, et...” lisamisele väite algusesse. Näiteks:

Tehte "EI" rakendamine lausele (1):

"See pole tõsi, et Surkov on mulle raha võlgu." (2)

Kui väide (1) on väär, siis väide (2) on tõene. Kui väide (2) on väär, siis väide (1) on tõene.

Pole raske mõista, et sõna “EI” topeltkasutus viib meid tagasi eelmise tõe juurde.

"See pole tõsi, see pole tõsi, et Surkov on mulle raha võlgu." (3)

Väite (3) tõde langeb alati kokku väite (1) tõesusega.

"JA"

Tehet JA rakendatakse kahele avaldusele. Selle tulemus on "tõene" ainult siis, kui mõlemad väited on tõesed (muidu "väär"):

vale JA vale = vale
vale JA tõene = vale
tõene ja vale = vale
tõsi JA tõsi = tõsi

Sellel toimingul on mitmeid teisi nimetusi: "loogiline JA", "konjunktsioon", "loogiline korrutamine". Rahvusvaheliste tähiste puhul kirjutatakse “mina” asemel “JA”.

Loomulikus keeles vastab see tehe sidesõna “ja” lisamisele väidete vahele. Näiteks:

"Surkov võlgneb mulle raha." (1)
"Petrov võlgneb mulle raha." (2)

Tehte "JA" rakendamine väidetele (1) ja (2):

"Surkov võlgneb mulle raha ja Petrov on mulle võlgu." (3)

Seda fraasi saab lühendada, säilitades sama tähenduse:

"Surkov ja Petrov on mulle raha võlgu." (3)

Väide (3) on tõene ainult siis, kui mõlemad väited (1) ja (2) on tõesed. Kui vähemalt üks neist on vale, siis on ka tulemus vale. Kui mõlemad on valed, on ka nemad.

See tähendab, et kui Petrov ei olnud mulle võlgu, vaid seda tegi ainult Surkov, siis väide (3) ei ole "pooltõde" ega "poolvale", vaid on lihtsalt vale.

"VÕI"

Tehet VÕI rakendatakse kahele avaldusele. Selle tulemus on "tõene", kui vähemalt üks väide on tõene (muidu "väär"):

vale VÕI vale = vale
vale VÕI tõene = tõsi
tõene VÕI vale = tõsi
tõsi VÕI tõsi = tõsi

Sellel toimingul on mitmeid teisi nimetusi: "loogiline VÕI", "kaasav VÕI", "disjunktsioon", "loogiline liitmine". Rahvusvaheliste tähiste puhul kirjutage "OR" asemel "OR".
Loomulikus keeles vastab see tehe sidesõna “või” lisamisele lausete vahele, kuid... mitte alati (vt allpool operatsiooni “XOR” kohta). Näiteks:

"Ma tahan midagi juua." (1)
"Ma tahan süüa". (2)

VÕI-toimingu rakendamine väidetele (1) ja (2):

"Ma tahan juua või tahan süüa." (3)

Vene keeles kõlab see õigesti, kuid kohmakalt ja seda fraasi saab lühendada, säilitades sama tähenduse:

"Ma tahan juua või süüa." (3)

Väide (3) on tõene, kui vähemalt üks väidetest (1) ja (2) on tõene või mõlemad on võimalikud. Kui mõlemad väited on valed, siis on ka tulemus väär.

See tähendab, et kui ma olen näljane, kuid mitte janu, siis väide (3) on tõsi. Kui ma ei ole nii söömise kui joomise vastu, kehtib ka väide (3). See on vale, kui ma ei taha ei üht ega teist.

"XOR"

XOR-operatsiooni rakendatakse kahele avaldusele. Selle tulemus on "tõene", kui täpselt üks väidetest on tõene (muidu "väär"):

vale XOR false = vale
väär XOR tõene = tõene
tõene XOR väär = tõene
tõene XOR tõene = väär

Sellel toimingul on mitmeid teisi nimetusi: "eksklusiivne VÕI", "lisamine moodul 2", "loogiline lisamine moodul 2". "XOR" on rahvusvaheline nimetus, üldiselt aktsepteeritud "vene" analoog puudub.

Loomulikus keeles vastab see tehe sidesõna “või” lisamisele avalduste vahele – täpselt nagu operatsiooni “OR” puhul. Näiteks:

"Ma hakkan küsima palgatõusu." (1)
"Püüan raha säästa." (2)

Toimingu "XOR" rakendamine väidetele (1) ja (2):

"Ma küsin palgatõusu või üritan raha säästa." (3)

Lühendatult:

"Ma küsin palgatõusu või üritan raha säästa." (3)

Väide (3) on tõene, kui täpselt üks väidetest (1) ja (2) on tõene. Kui ma ei kavatse palgatõusu küsida ega raha säästa, siis on see lause vale. Samuti pidasin silmas seda, et ma ei kavatse mõlemat korraga teha.

Pange tähele erinevust OR ja XOR operatsioonide vahel. See koosneb ainult viimasest reeglist:

tõsi VÕI tõsi = tõsi
tõene XOR tõene = väär

Loomulikus keeles tähistatakse mõlemaid tehteid sama sidesõnaga “või”. See on näide mitmetähenduslikkusest loomulikus keeles. Kui mäletate, võib homonüümidel ja mitmetähenduslikel sõnadel olla rohkem kui üks tähendus. Sidesõna “või” on just see: sellel on kaks võimalikku tähendust. Esimest väljendab loogiline tehte “OR”, teist – loogikatehe “XOR”.

Inglise keeles on samad probleemid: sidesõnal “või” on kaks sama tähendust. Kuid iidsetel roomlastel oli see lihtsam, kuna ladina keeles on kaks erinevat sõna: "vel" (OR-operatsioon) ja "aut" (XOR-operatsioon).

Kuna erinevus OR ja XOR vahel on väike (üks viimane reegel), siis mõnikord pole erinevusel tähtsust. Mõnikord võite arvata, mida intonatsiooni või konteksti all mõeldakse. Mõnikord pole täpset tähendust võimalik kindlaks teha.

Selles artiklis räägime mõnest bititoimingust. Vaatame peamisi: XOR (eksklusiivne VÕI), AND, NOT ja OR.

Teabe minimaalne mõõtühik on teatavasti natuke, mis salvestab ühe kahest väärtusest: 0 ( Vale, vale) või 1 ( Tõsi, tõsi). Seega saab bitilahter olla korraga ainult ühes kahest võimalikust olekust.

Bittide manipuleerimiseks kasutatakse teatud toiminguid - loogiline või tõeväärtus. Neid saab rakendada mis tahes bitile, olenemata sellest, kas selle väärtus on null või üks. Noh, vaatame näiteid kolme põhilise loogilise operatsiooni kasutamise kohta.

Loogiline operatsioon JA (ja)

JA tähistatud &.

AND operaator sooritatakse 2 biti pealt, võtame näiteks a ja b. Tehe JA tulemus on 1, kui a ja b on võrdsed 1-ga. Vastasel juhul on tulemuseks 0. Näiteks AND-i kasutades saate teada, kas arv on paaris või mitte.

Vaadake AND-operatsiooni tõesuse tabelit:

Loogiline operatsioon VÕI (VÕI)

Näidatud | .

Operaator VÕI tehtud ka 2 bitiga (a ja b). Tulemuseks on 0, kui a ja b on 0, muidu on see 1. Vaata tõesuse tabelit.

Loogiline operatsioon XOR (eksklusiivne VÕI)

XOR-operaator on tähistatud ^-ga.

XOR täidetakse 2 bitiga (a ja b). XOR-operatsiooni tulemus ( eksklusiivne VÕI) on 1, kui üks bittidest b või a on 1. Vastasel juhul on XOR-operaatori rakendamise tulemus 0.

XOR-i (eksklusiivne VÕI) loogilise operatsiooni tõesuse tabel näeb välja järgmine:

Kasutades XOR-i (eksklusiivne VÕI), saate muuta 2 sama andmetüübi muutuja väärtusi ilma ajutist muutujat kasutamata. Samuti saate teksti krüptida XOR-i abil, näiteks:

String msg = "See on sõnum"; char sõnum = msg.toCharArray(); Stringi võti = ".*)"; String krüptitudString = new String(); for(int i = 0; i< message.length; i++){ encryptedString += message[i]^key.toCharArray(); }

Olen nõus, et XOR pole kaugeltki kõige usaldusväärsem krüpteerimismeetod, kuid see ei tähenda, et seda ei saaks ühegi krüpteerimisalgoritmi osaks muuta.

Loogiline operatsioon EI (EI)

See on bitipõhine eitus, nii et seda tehakse ühe bitiga ja tähistatakse ~ .

Tulemus sõltub biti olekust. Kui see on nullseisundis, siis on operatsiooni tulemus üks ja vastupidi. Kõik on äärmiselt lihtne.

Need 4 loogikatehet tuleks kõigepealt meeles pidada, sest nende abiga saate peaaegu igasuguse võimaliku tulemuse. On ka toiminguid nagu<< (побитовый сдвиг влево) и >> (bitipõhine nihe paremale).


Operaator Süntaks Kirjeldus
JA A JA B Ühendus: Kui A ja B on tõesed, siis tõesed. Vastasel juhul - vale
VÕI A VÕI B Disjunktsioon: Kui mõni operand on Tõene, siis Tõene. Vastasel juhul - vale
MITTE EI A Eitus: Kui A on Väär, siis on see Tõene. Vastasel juhul - vale
XOR A XOR B Erand: Kui A on Tõene või B on Tõene, siis - Tõene. Vastasel juhul - vale
EQV A EQV B Samaväärsus: Kui A väärtus on sama kui B, siis on see tõene. Vastasel juhul - vale
IMP A IMP B Mõte: Kui A on tõene ja B on väär, siis väär. Muidu – tõsi

Boole'i ​​operaatori operandiks võib olla mis tahes kehtiv avaldis, millel on Boole'i ​​tulemus, samuti arv, mille saab teisendada Boole'i ​​väärtuseks.

Loogilise operatsiooni tulemuseks on Boolean-tüüpi väärtus (või Null, kui vähemalt üks operandidest on Null).

Loogiline operaator JA

Süntaks:
Operandi_1 JA Operandi_2


Operaator JA täidab loogiline side.

Selle toimingu tulemus on Tõene ainult siis, kui mõlemad operandid on Tõene, vastasel juhul Väär.


Tõe tabel


Operaatorit JA saab kasutada mitme operandi jaoks:


(5 3) JA (5=6) tulemus on Väär


Olenemata operandide arvust on loogilise JA-tehte tulemus Tõene ainult siis, kui kõik avaldise operandid annavad väärtusele Tõene. Igal muul juhul on tulemus vale. Pange tähele, et operandid on sulgudes. VBA hindab esmalt iga sulgudes oleva operandi väärtust ja seejärel kogu avaldist.

Loogiline operaator VÕI

Süntaks:
Operand_1 VÕI Operand_2


Seda teeb operaator VÕI loogiline disjunktsioon.

Selle toimingu tulemus on Tõene, kui vähemalt üks operandidest on Tõene, vastasel juhul Väär.


Tõe tabel


Operaatorit VÕI saab kasutada mitme operandi jaoks:


(5 3) VÕI (5=6) on tulemuseks Tõene


Olenemata operandide arvust on loogilise VÕI-tehte tulemus alati Tõene, kui vähemalt üks avaldise operandidest on Tõene. Vastasel juhul on tulemus Vale.

Tehtereid JA ja VÕI saab kombineerida:


((5 3)) VÕI (5=6) tulemus on Tõene

Loogiline operaator EI

Süntaks:
MITTE Operand


Operaator NOT teeb seda loogiline eitus.

Operaator NOT kasutab ainult ühte operandi.


Tõe tabel


AND OR NOT operaatoreid saab kombineerida:


((5 3)) VÕI EI (5=6) on tulemuseks Tõene

Loogiline operaator XOR

Süntaks:
Operand_1 XOR Operand_2


XOR-i operaator teeb seda loogiline erand.

Selle toimingu tulemus on tõene, kui operandidel on erinevad väärtused, vastasel juhul on Väär.


Tõe tabel


((5 3)) VÕI EI (5=6) XOR (5=5) tulemus on Väär

Loogiline operaator EQV

Süntaks:
Operand_1 EQV Operand_2


EQV operaator on operaator loogiline samaväärsus.

Selle toimingu tulemus on tõene, kui operandidel on samad väärtused, vastasel juhul on Väär.


Tõe tabel


((5 3)) VÕI EI (5=6) EQV (5=5) tulemus on tõene

Loogiline operaator IMP

Süntaks:
Operand_1 IMP Operand_2


IMP operaator sooritab loogilise toimingu tagajärjed.


Tõe tabel


((5 3)) VÕI EI (5=6) IMP (5=5) tulemus on tõene


IMP loogiline operaator on kõigist loogilistest operaatoritest kõige vähem intuitiivne. Õnneks tuleb selle kasutamise vajadust ette üsna harva.

Tehte välistav VÕI (mitteekvivalentsus, liitmine moodul kaks) tähistatakse sümboliga ja erineb loogilisest VÕI ainult siis, kui A=1 ja B=1.

Seega nimetatakse kahe väite X1 ja X2 erinevust väiteks Y, mis on tõene siis ja ainult siis, kui üks neist väidetest on tõene ja teine ​​on väär.

Selle toimingu definitsiooni saab kirjutada tõesuse tabeli kujul (tabel 6):

Tabel 6 – toimingu „EXCLUSIVE OR” tõesuse tabel

Nagu tabelist 6 näha, vastab elemendi toimimise loogika selle nimele.

See on sama "VÕI" element ühe väikese erinevusega. Kui väärtus mõlemas sisendis on võrdne loogilisega, siis elemendi “EXCLUSIVE OR” väljund on erinevalt elemendist “OR” mitte üks, vaid null.

Toiming EXCLUSIVE OR võrdleb tegelikult vasteks kahte kahendnumbrit.

Iga loogilist konnektiivi käsitletakse loogiliste lausete operatsioonina ning sellel on oma nimi ja tähistus (tabel 7).

Tabel 7 – Põhilised loogilised operatsioonid

Määramine

operatsioonid

Lugemine

Operatsiooni nimi

Alternatiivsed nimetused

Eitus (inversioon)

Rida ülaosas

Side (loogiline korrutamine)

Disjunktsioon (loogiline liitmine)

Kui siis

Implikatsioon

Siis ja ainult siis

Samaväärsus

Või kumbagi

EKSKLUSIIVNE VÕI (lisamoodul 2)

  1. Loogikatete järjekord keerulises loogilises avaldises

Inversiooni, konjunktsiooni ja disjunktsiooni loogiliste operatsioonide süsteem võimaldab konstrueerida meelevaldselt keeruka loogilise avaldise.

Loogikavaldise väärtuse arvutamisel sooritatakse teatud loogiliste operatsioonide järjekord.

1. Inversioon.

2. Sidesõna.

3. Disjunktsioon.

4. Implikatsioon.

5. Samaväärsus.

Määratud toimingute järjekorra muutmiseks kasutatakse sulgusid.

  1. Loogikaväljendid ja tõetabelid

    1. Boole'i ​​avaldised

Iga liitväidet saab väljendada valemi kujul (loogiline avaldis), mis sisaldab loogilised muutujad, tähistades väiteid ja loogiliste operatsioonide märgid, mis tähistavad loogilisi funktsioone.

Formaalkeeles (loogikaalgebra keeles) liitlause kirjutamiseks loogilise avaldise kujul on liitlauses vaja tuvastada lihtsad väited ja nendevahelised loogilised seosed.

Kirjutame loogilise avaldise kujul liitlause “(2·2=5 või 2∙2=4) ja (2∙2≠5 või 2∙ 2 4)".

Analüüsime liitlauset. See sisaldab kahte lihtsat väidet:

A = "2 2 = 5" – vale (0),

B = "2 2 = 4" – tõene (1).

Seejärel saab liitlause kirjutada järgmisel kujul:

«( AvõiIN) ja (Ā võiIN)».

Nüüd peate kirjutama avalduse loogilise avaldise kujul, võttes arvesse loogiliste toimingute jada. Loogiliste toimingute tegemisel määratletakse järgmine nende täitmise järjekord:

inversioon, konjunktsioon, disjunktsioon.

Määratud järjekorra muutmiseks saab kasutada sulgusid:

F = (AvIN) & (Ā vIN).

Liitväidete tõesust või väärust saab määrata puhtformaalselt, juhindudes propositsioonialgebra seadustest, viitamata väidete semantilisele sisule.

Asendame loogilise avaldisega loogiliste muutujate väärtused ja saame põhiliste loogiliste operatsioonide tõetabeleid kasutades loogilise funktsiooni väärtuse:

F= (A v B) & ( Ā v B) = (0 v 1) & (1 v 0) = 1 & 1 = 1.

      Tõe tabelid

Tabeleid, milles loogilised toimingud kajastavad keerukate väidete arvutuste tulemusi algsete lihtsate väidete erinevate väärtuste jaoks, nimetatakse tõetabeliteks.

Lihtlauseid tähistatakse muutujatega (näiteks A ja B).

Tõetabelite koostamisel on soovitatav juhinduda teatud toimingute jadast:

    on vaja määrata ridade arv tõesuse tabelis. See on võrdne loogilises avaldises sisalduvate loogilise muutuja väärtuste võimalike kombinatsioonide arvuga. Kui loogiliste muutujate arv on võrdne P, See:

ridade arv = 2 n .

Meie puhul loogiline funktsioon

on 2 muutujat ja seetõttu peab tõetabeli ridade arv olema 4;

    vaja on määrata tõesuse tabelis veergude arv, mis võrdub loogiliste muutujate arvuga pluss loogikatehete arv.

Meie puhul on muutujate arv kaks: A ja B ning loogikatehete arv viis (tabel 8), see tähendab, et tõesuse tabeli veergude arv on seitse;

    on vaja koostada kindlaksmääratud arvu ridade ja veergudega tõetabel, määrata veerud ja sisestada tabelisse algsete loogiliste muutujate võimalikud väärtuste komplektid;

    tõesuse tabel on vaja täita veergude kaupa, sooritades põhilised loogilised operatsioonid vajalikus järjestuses ja nende tõesuse tabelite järgi.

Nüüd saame määrata Boole'i ​​funktsiooni väärtuse mis tahes Boole'i ​​muutuja väärtuste komplekti jaoks.

Tabel 8 – loogilise funktsiooni tõesuse tabel

Tähistab kõnekujund “kas... või...” Liitväide “kas A või B” on tõene, kui kas A või B on tõene, kuid mitte mõlemad; vastasel juhul on liitväide vale.

Need. tulemus on tõene (võrdne 1-ga), Kui A ei ole võrdne B-ga (A≠B).

Seda toimingut võrreldakse sageli disjunktsiooniga, kuna need on omadustelt väga sarnased ja mõlemal on sarnasusi igapäevase kõne sidesõnaga "või". Võrrelge nende toimingute reegleid:

1. tõsi, kui tõsi või , või mõlemad korraga.

2. tõsi, kui tõsi või, Aga Mitte mõlemad korraga.

Operatsioon välistab viimane variant ("mõlemad korraga") ja sel põhjusel nimetatakse seda eksklusiivseks "VÕI". Ebaselgus loomulik keel on see, et sidet “või” saab kasutada mõlemal juhul.

5. Implikatsioon (loogiline tagajärg) moodustatakse kahe väite ühendamisel üheks, kasutades kõnekuju “kui ... siis ....”.

Salvestus: A®B

Implikatsioonitehte abil moodustatud liitväide on väär siis ja ainult siis, kui tõesest eeldusest (esimesest väitest) tuleneb vale järeldus (teine ​​väide).

Need. kui 1 tähendab 0, siis on tulemus 0, muudel juhtudel – 1.

Näiteks väide “Kui arv jagub 10-ga, siis on see jagub 5-ga” on tõene, sest nii esimene kui ka teine ​​väide on tõesed.

Väide "Kui arv jagub 10-ga, siis jagub see 3-ga" on vale, sest tõesest eeldusest tehakse vale järeldus.

"See nelinurk on ruut" (A) Ja "Ringi saab etteantud nelinurga ümber piirata" (IN). Seejärel kõlab liitlause kujul "Kui antud nelinurk on ruut, saab selle ümber tõmmata ringi."

Tavakõnes sideaine "kui siis" kirjeldab väidete vahelist põhjuse-tagajärje seost. Kuid loogikatehetes väidete tähendust ei arvestata. Arvesse võetakse ainult nende tõesust või valet. Seetõttu ei tohiks häbeneda sisult täiesti mitteseotud väidete moodustatud implikatsioonide “mõttetust”. Näiteks nii: "Kui USA president on demokraat, siis on Aafrikas kaelkirjakud", "kui arbuus on mari, siis on bensiinijaamas bensiin."

6. Ekvivalentsus (loogiline võrdsus, ~ º Û) moodustatakse kahe väite liitmisel üheks, kasutades kõnekuju “...kui ja ainult siis, kui...”

Ekvivalentsustehtega moodustatud liitlause on tõene siis ja ainult siis, kui mõlemad väited on samaaegselt kas väärad või tõesed.

Näiteks väited "Arvuti saab arvutada siis ja ainult siis, kui see on sisse lülitatud" ja "Arvuti ei saa arvutada siis ja ainult siis, kui see pole sisse lülitatud" on tõesed, kuna mõlemad lihtsad väited on samaaegselt tõesed.


Tõe tabelid

Iga liitlause (loogilise funktsiooni) jaoks on võimalik koostada tõetabel, mis määrab selle tõesuse või vääruse kõigi võimalike lihtsate väidete algväärtuste kombinatsioonide jaoks.

Tõe tabel on loogikalülituse (operatsiooni) tabel, mis loetleb kõik võimalikud sisendsignaalide (operandide) tõeväärtuste kombinatsioonid koos väljundsignaali tõeväärtusega (toimingu tulemus) kõigi nende kombinatsioonide jaoks.

Peegeldame ülalpool käsitletud loogilisi tehteid tõesuse tabelis:

Propositsioonialgebras saab kõik loogilised funktsioonid loogiliste teisendustega taandada kolmeks põhiliseks: loogiline liitmine, loogiline korrutamine ja loogiline eitus.

Tõestame, et implikatsioonitehing A®B on samaväärne loogilise avaldisega: