Paavo Räisänen. Ohjelmoijan binaarialgebra ja heksaluvut. www.ohjelmoimaan.net



Samankaltaiset tiedostot
Ohjelmoijan binaarialgebra ja heksaluvut

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

811120P Diskreetit rakenteet

LUKUJÄRJESTELMÄT. Kymmenjärjestelmä eli desimaalijärjestelmä. Binäärilukujärjestelmä

SISÄLLYS - DIGITAALITEKNIIKKA

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena

Kappale 20: Kantaluvut

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s

ANSI/IEEE Std

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

5. Laskutoimitukset eri lukujärjestelmissä

Huom! (5 4 ) Luetaan viisi potenssiin neljä tai viisi neljänteen. 7.1 Potenssin määritelmä

8.1 Murtoluvun määritelmä - murtoluvulla tarkoitetaan aina osaa (osia) jostakin kokonaisuudesta

Aloitustunti MAA22 Starttikurssi pitkän matematiikan opiskeluun

Palautteita. Tutoriaalit olivat vaikeat! Totta, tentti on onneksi helpompi

7. Laskutoimitukset eri lukujärjestelmissä 1 / 31

HUOLTOMATEMATIIKKA 1, SISÄLTÖ TIEDOT JA ESIMERKIT:

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Merkitse kertolasku potenssin avulla ja laske sen arvo.

13. Loogiset operaatiot 13.1

Seguinin lauta A: 11-19

Tehtävä 2: Tietoliikenneprotokolla

13. Loogiset operaatiot 13.1

PUHUTAAN NUMEROILLA Murtoluvut Desimaaliluvut tai

BL40A1711 Johdanto digitaalielektroniikkaan: Johdanto ja lukujärjestelmät

Python-ohjelmointi Harjoitus 2

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Desimaaliluvut, mitä ne oikeastaan ovat?

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

2.2 Neliöjuuri ja sitä koskevat laskusäännöt

Luvuilla laskeminen. Esim. 1 Laske

n. asteen polynomilla on enintään n nollakohtaa ja enintään n - 1 ääriarvokohtaa.

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Antti Vähälummukka 2010

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Ohjelmoinnin perusteet Y Python

Mikrokontrollerit. Mikrokontrolleri

Luento 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot

1 Raja-arvo. 1.1 Raja-arvon määritelmä. Raja-arvo 1

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Java-kielen perusteita

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (3)

Luento 6 Tiedon esitysmuodot

niin järjestys on tämä: ensin kerto- ja jakolaskut vasemmalta oikealle, sen jälkeen plus- ja miinuslaskut vasemmalta oikealle.

Ohjelmoinnin perusteet Y Python

Digitaalitekniikan matematiikka Harjoitustehtäviä

Ohjelmoinnin peruskurssi Y1

Taitaja2008, Elektroniikkalajin semifinaali

Ohjelmoinnin perusteet Y Python

Mittaustarkkuus ja likiarvolaskennan säännöt

SUURI. Windows 8.1 -kirja. Reima Flyktman

Ohjelmoinnin perusteet Y Python

LUKUTEORIA johdantoa

Prosenttikäsite-pelin ohje

7.lk matematiikka. Murtoluvut. Hatanpään koulu Syksy 2017 Janne Koponen

Ohjelmoinnin perusteet Y Python

Joomla pikaopas. Yksinkertainen opas, jossa neuvotaan esimerkkisivuston teko Joomla julkaisujärjestelmällä vaihe vaiheelta.

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

7.lk matematiikka. Murtoluvut. Hatanpään koulu Syksy 2017 Janne Koponen

Successive approximation AD-muunnin

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Luento 6 Tiedon esitysmuodot. Lukujärjestelmät Kokonaisluvut Liukuluvut Merkit, merkkijonot Totuusarvot Kuvat, äänet, hajut(?)

Jatkuvat satunnaismuuttujat

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (3)

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Negatiiviset luvut ja laskutoimitukset

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Jäännösluokat. Alkupala Aiemmin on tullut sana jäännösluokka vastaan. Tarkastellaan

2 Yhtälöitä ja epäyhtälöitä

JHS 180 Paikkatiedon sisältöpalvelut Liite 4 INSPIRE-palvelujen laadun testaus

Aluksi Kahden muuttujan lineaarinen yhtälö

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Oppilas vahvistaa opittuja taitojaan, kiinnostuu oppimaan uutta ja saa tukea myönteisen minäkuvan kasvuun matematiikan oppijana.

Kombinatorisen logiikan laitteet

3 Raja-arvo ja jatkuvuus

Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8

Matemaatiikan tukikurssi

Työasema- ja palvelinarkkitehtuurit (IC130301) Apumuistit. Kiintolevyt. 5 opintopistettä. Petri Nuutinen

MAB3 - Harjoitustehtävien ratkaisut:

Ohjelmoinnin peruskurssi Y1

Juuri 2 Tehtävien ratkaisut Kustannusosakeyhtiö Otava päivitetty

Ohjelmoinnin peruskurssi Y1

ELEC-C3240 Elektroniikka 2

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (4) Tiedon esitys (7) Suorittimen ymmärtämä tieto (9) Tietokoneen toiminta, K

Ohjelmoinnin perusteet Y Python

Luento 6 Tiedon esitysmuodot

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

NELIÖJUURI. Neliöjuuren laskusääntöjä

LAUSEKKEET JA NIIDEN MUUNTAMINEN

Ohjelmoinnin perusteet Y Python

Transkriptio:

Paavo Räisänen Ohjelmoijan binaarialgebra ja heksaluvut www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta ei saa liittää. Opetustarkoituksessa materiaali on vapaasti käytettävissä. Verkko-opetuksessa oppaan saa julkaista oppilaille tarkoitetuilla sivuilla.

Sisällysluettelo: 1: Binaarijärjestelmä eli 2-järjestelmä 1.1: Positiiviset binaariluvut 1.2: Negatiiviset binaariluvut komplementtilukuina 2: Binaarilukujen loogiset operaatiot 2.1: Yleistä 2.2: AND operaatio 2.3: OR operaatio 2.4: XOR operaatio 2.5: NOT operaatio 3: Heksaluvut 3.1: Yleistä 3.2: Heksaluvut binaariluvuiksi 3.3: Binaariluku heksaluvuksi 3.4: Heksaluku desimaaliluvuksi ja päinvastoin 4: Lähteet

1.1: Positiiviset binaariluvut 1 Binaarijärjestelmä eli 2-järjestelmä Binaarijärjestelmä (voidaan ilmaista myös binäärijärjestelmä) on lukujärjestelmä, jonka kantaluku on 2, tosin sanoen numeron paikka kertoo mistä kakkosen potenssista on kysymys vrt. 10-järjestelmä (desimaaliluvut), jossa numeron paikka kertoo, missä 10 potenssin kohdassa numero lukua on. 8 bittinen binaariluku voi olla esim. muotoa 10110010. Binaariluku muodostuu aina vain ykkösistä ja nollista. Tietokoneen prosessori ymmärtää lopulta vain binaarilukuja, joten binaarilukuja käytetään paljon erityisesti koneenläheisessä ohjelmoinnissa. Binääriluvutkin ovat lopulta vain merkintä osoittamassa sähkövarauksia. Itse tietokone ei käsittele numeroita vaan bitti tarkoittaa sähkövarausta, joka joko on varattu, eli 1, tai sähkövarausta ei ole, eli 0. Esimerkiksi tavussa, jossa on 8 bittiä, on 8 sähkövarausta, jotka voivat olla joko varattuja, tai varaamattomia. Huomioitavaa on, että 8:lla bitillä (yksi tavu) voidaan ilmaista luvut 0 255, eli sillä voidaan osoittaa korkeintaan 256:een eri osoitteeseen. Binaariluku saa painoarvot kahden potensseina oikealta vasemmalle, eli muodostuu lukujoukko: 1=2 0, 2=2 1, 4=2 2, 8=2 3, 16=2 4, 32=2 5, 64=2 6, 128=2 7, 256=2 8, 512=2 9,1024=2 10, 2048=2 11...jne. 2:n potenssi Painoarvot 0 1 1 2 2 4 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1024 11 2048 12 4096

2:n potenssi Painoarvot 13 8192 14 16 384 15 32 768 16 65 536 Esimerkki. 1.1.1: Muunnetaan luku binaariluku 10011011 desimaaliluvuksi (kymmenjärjestelmän luvuksi). Luetaan oikealta vasemmalle. Ykkosiä on yksi, samoin kakkosia, nelosia on nolla jne. eli alekkain lueteltuna: 1 : 2 7 *1 =128 0 : 2 6 *0 =0 0 : 2 5 *0 =0 1 : 2 4 *1 =16 1 : 2 3 *1 =8 0 : 2 2 *0 =0 1 : 2 1 *1 =2 1 : 2 0 *1 =1 Lasketaan yhteen 1+2+0+8+16+0+0+128 = 155 Luku 10011011 on siis desimaalilukuna 155. Esimerkki 1.1.2: Muunnetaan luku 1612 binaariluvuksi. Desimaaliluku muutetaan binaariluvuksi sen painoarvojen, eli kahden potenssien apuna käyttäen seuraavasti: 1612-1024 = 588 eli 2:n potensseja 10 on 1. Jatketaan laskutoimitusta jäljelle jäävällä luvulla 588. 588-512 = 76 eli 2:n potensseja 9 on 1. Jatketaan:

76-256 menisi miinuksen puolelle, eli 2:n potensseja 8=0. Jatketaan: 76-128 menisi miinuksen puolelle, eli 2:n potensseja 7=0. 76-64 =12 2:n potensseja 6 on 1. 12-32 miinuksen puolelle 2:n potensseja 5 on 0. 12-16 miinuksen puolelle 2:n potensseja 4 on 0. 12-8 4 2:n potensseja 3 on 1. 4-4 0 eli 2:n potensseja 2 on 1; lasku meni tasan, joten seuraavat kahden potenssit 1 (painoarvo 2) ja 0 (painoarvo 1=) ovat nollia. Luku 1612 binäärilukuna on siis 11001001100. Helpoiten binaari-, heksa- ja desimaalilukuja (eli kymmenjärjestelmän lukuja) muuntaa laskimen avulla, mutta joskus voi olla tarpeen osata muuntaa niitä myös

paperilla laskemalla. Binaari- ja heksalukujen toimintaperiaate täytyisi jokaisen vähän pidemmälle ehtineen ohjelmoijan osata. Positiivisia binaarilukuja käsiteltäessä edessä olevia nollia ei tarvitse merkitä. Bitti ( b, esim. Mb megabittiä) on yksi nolla tai ykkönen, ja tavu (B, esim. MB megatavu, englanniksi byte, käytetään Suomessa myös merkintää t, eli esim. kt tai Mt) on 8 bittiä. Binaariluvun perässä käytetään kirjoittaessa kirjainta B osoittamassa, että kyse on binaariluvussa. Siten merkinnät 100 (desimaaliluku) ja 100B (binaariluku) ovat eri asia. Tietokonetekniikassa etuliitteet kilo, mega, giga, tera viittaavat tavujen määrään. Tietokoneteknikassa 1 kt (kilotavu, kb, tai kt) on 2 10 eli 1024 B. Vastaavasti: MB tai Mt= 10 20 tavua, eli 1048576 tavua (tuhat kilotavua). GB tai Gt = 10 30 tavua, eli miljoona kilotavua. TB tai Tt= 10 40 tavua, eli miljardi kilotavua. Modeemien ja verkkokorttien nopeudet ilmoitetaan yleensä bitteinä sekunnissa (kb/s tai Mb/s). Bittijonoja käsiteltäessä luvun oikeanpuoleisinta bittiä kutsutaan vähiten merkitseväksi bitiksi, eli lyhenteellä LSB. Vastaavasti vasemmanpuoleisinta bittiä kutsutaan lyhenteellä MSB, eniten merkitsevä bitti. Pitkiä bittijonoja käsiteltäessä bitit ryhmitellään oikealta alkaen neljän ryhmiin. Esim. 10 1101 1001 0011 Binaariluvun voi kertoa kahdella lisäämällä oikealle (LSB päähän) nollan. 1.2: Negatiiviset binaariluvut komplementtilukuina Binaariluvuissa ei ole erikseen + ja merkkiä. Joskus harvoin käytetään jotain bittiä merkkibittinä osoittamassa, onko luku positiivinen vai negatiivinen. Tällaisilla laskeminen on kuitenkin hyvin vaikeaa. Niinpä yleensä käytetään komplementtilukuja. Kun yksi tavu voi sisältää positivisena desimaalilukuna arvot 0...+255, voi komplementtinen tavu sisältää arvot -128...0...+127. Luku ikäänkuin pyörähtää ympäri. Jos arvoon +127 lisätään 1, arvoksi tulee -128. Komplemennitlukujen perässä ei käytetä merkintä B, vaan on erikseen kerrottava, että käytetään 2:n komplementtilukua. Komplemettiluvuilla voi esittää sekä positiivisia, että negatiivisia lukuja. Sama numerosarja voi tarkoittaa eri lukua binaari- tai komplementtilukuna. Binaarilukuja voi muuttaa negatiiviksi komplementtiluvuiksi muuttamalla nollat ykkösiksi ja ykköset nolliksi, ja lisäämällä lukuun yksi. Esimerkki 1.2.1: kahdeksanbittisten binaarilukujen muuttaminen komplementtiluvuiksi.

des. +1 00000001 kompl: 11111111 (11111110 +1) des. -3 des. +2 00000010 kompl. 11111110 (11111101 +1) des. -2 des +3 00000011 kompl. 11111101 (11111100 +1) des. -3 nolla on kummassakin sama 00000000 Muutettaessa toisinpäin tehdään täysin samoin. Muutetaan nollat ykkosiksi, ja lisätään yksi. Jos käytetään MSB bittiä komplementtiluvuilla, sen arvo 1 kertoo, että kyseessä on negatiivinen arvo, ja 0 tarkoittaa puolestaan positiivista. Jos tiedetään, että kyse on komplementtiluvusta, luvun edessä olevia ykkösiä tai nollia voidaan poistaa, kunhan vähintään yksi ykkönen tai nolla jätetään. Kun käytetään 2:n koplementtilukuja, on aina tiedettävä etukäteen kuinka monta bittiä luvussa on, jotta tietää lukualueen. 2:n komplementtiluku on helpoin muodostaa esim. desimaaliluvusta tekemällä ensin positiivinen vastaava binaariluku, ja muuttamalla se 2.n komplementtiluvuksi (esim. 2, -2). Negatiivisesta 2:n komplementtiluvusta ( 1 :llä alkavasta 2:n komplementtiluvusta) ei voi suoraan päätellä sen lukuarvoa. Helpoin keino tutkia arvo on muuttaa se ensin vastaavaksi positiiviseksi luvuksi.

2 Binaarilukujen loogiset operaatiot 2.1: Yleistä Binaariluvuille käytetään paljon erilaisia bittioperaatioita. Loogisia operaatioita (AND, OR) käytetään paljon ehtolauseissa kaikessa ohjelmoinnissa. Tässä oppaassa käsittelen, miten loogisilla operaatioilla operoidaan binaarilukuja. Menetelmiä voi joutua käyttämään esim. tietokonegrafiikassa. Loogisten operaatioiden (propositiologiikka, lauselogiikka, Boolen logiikka) matemaattisena esitystapana voidaan käyttää Boolen algebraa. 2.2: AND operaatio AND operaatio tarkoittaa, että kummankin ehdon täytyy toteutua, eli olla yksi. Jos arvo on eri, tai nolla ei toteudu. Esimerkki 2.2.1: 11010101 AND 01110011 = 01010001 2.3: OR operaatio OR operaatio tarkoittaa, että kumpikin, tai jompikumpi ehdoista toteutuu, eli on yksi. Esimerkki 2.3.1: 10100110 OR 01101011 = 11101111 2.4: XOR operaatio XOR toteutuu, jos kumpikin verrattava bitti ovat erisuuria, eli toinen on nolla, ja toinen on yksi. Esimerkki 2.4.1: 11010010 XOR 10110110 = 01100100

2.5: NOT operaatio Kääntää binaariluvusta nollat ykkösiksi ja ykköset nolliksi. Operoitava luku: 11010110 tulos NOT operaation jälkeen: 00101001

3 Heksaluvut 3.1: Yleistä Heksalukuja käytetään paljon varsinkin koneenläheisessä ohjelmoinnissa, koska niitä on helppo muuttaa binaariluvuiksi, ja päinvastoin. Heksajärjestelmän kantaluku on 16, joka on 2:n potenssi eli 2 4. Heksajärjestelmää voidaan pitää binaarijärjestelmän lyhennysmuotona. Jokainen heksanumero voidaan esittää neljällä binaariluvun numerolla. Kun merkistö on 16 numeroinen, tarvitaan apuna kuutta kirjainta. Heksajärjestelmän numerot ovat 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Heksaluvuissa käytetään kirjoitettessa perässä kirjainta H, esim. 6EH tai 12H. Taulukko heksa-, binaari ja desimaalilukujen vastaavuudesta Heksaluku Binaariluku Desimaaliluk u 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 A 1010 10 B 1011 11 C 1100 12 D 1101 13 E 1110 14 F 1111 15 10 10000 16

3.2: Heksaluvut binaariluvuiksi Heksaluvut pystyy muuttamaan binaariluvuiksi korvaamalla numero binaarinumerosarjalla. Esimerkki 3.1.1: 2EH = numeroa 2 vastaa binaarinumerosarja 0010, numeroa E vastaa 1110, joten binaariluku on 0010 1110. 3.3: Binaariluku heksaluvuksi Binaariluvun saa helposti heksaluvuksi jakamalla lukun oikealta lukien neljännumeron sarjoihin, ja muuttamalla luvut sitten heksaluvuiksi taulukon avulla (tai laskemalla). Esimerkki 3.2: Binaariluku: 101 0010. Jaetaan osiin: 101 on sama kuin 0101 eli heksanumero 5. 0010 on heksanumerona 2, eli koko luku on 52H. Esimerkki 3.3: Binaariluku 11 1101 0011. Jaetaan osiin: 11 on sama kuin 0011, eli heksanumerona 3 (muistathan: etunollia saa binaarilukuun lisätä ja poistaa). 1101 on heksana D ja 0011 on heksana 3, eli koko luku on 3D3H. 3.4: Heksaluku desimaaliluvuksi ja päinvastoin Heksaluvut saa muutettua helposti desimaaliluvuksi (kymmenjärjestelmäksi) samalla tekniikalla kuin binaarilukujen muutos kerrotaan esimerkissä 1.1.1. Esimerkki 3.4.1: Heksaluku desimaaliluvuksi Heksaluku 14E6H = 1*16 3 + 4*16 2 + 14*16 1 + 6*16 0 = 1* 4096 + 4* 256 + 14* 16 + 6* 1 = 4096 + 1024 + 224 + 6 = 5350 eli heksaluku 14E6H on desimaalilukuna 5350. Desimaaliluvun saa muutettua heksaluvuksi vastaavasti kuin binaariluvuksi esimerkissä 1.1.2.

Esimerkki 3.4.2: Desimaaliluku heksaluvuksi Desimaaliluku 4868. Painoarvot 4096, 256, 16, 1. Laskettaessa 4868 4096 = 772, (menee yhden kerran jakolaskussa 4368/ 4096) 772 / 256 = 3 kokonaista. Jakojäännös ( 772-3*256 ) = 4 4 / 16 laskun tuloksena ei yhtään kokonaista 4 / 1 = 4 eli heksaluku on 1304H. Edellinen lasku taulukossa esiteltynä (desimaaliluku 4868): Painoarvot Laskutoimitus Kerroin Kerroin heksana Jakojäännös 4096 4868 / 4096 1 1 772 256 772 / 256 3 3 4 16 4 / 16 0 0 4 1 4 / 1 4 4 0 Saadaan sama luku 1304H. Esimerkki 3.4.3: Desimaaliluku heksaluvuksi Desimaaliluku 2607. Painoarvot 256, 16, 1. Laskettaessa 2607 / 256 menee 10 kokonaista, eli numero A. Jakojäännös 2607-10*256 = 47 47 / 16 menee 2 kokonaista, jakojäännös 15 15 / 1 = 1, eli viimeinen numero F (des. 15) eli heksaluku on A2FH. Edellinen lasku taulukossa esiteltynä (desimaaliluku 2607). Painoarvo Laskutoimitus Kerroin Kerroin heksana Jakojäännös 256 2607 / 256 10 A 47 16 47 / 16 2 2 15 1 15 / 1 15 F 0 Eli tulos sama A2FH. Painoarvoja, eli 16:sta potensseja: 1, 16, 256, 4096, 65536, 1 048 576, 16 777 216.

16:sta potenssi Painoarvo 0 1 1 16 2 256 3 4096 4 65536 5 1 048 576 6 16 777 216

4 Lähteet Tietotekniikka osa 1: Digitaalitekniikka osa A: Pekka Rantala MSX-assembler ja -konekieli: Ian Sinclair Flash 8 & ActionScript: Pasi Manninen, Jarno Marttila Wikipedia: http://fi.wikipedia.org/wiki/boolen_algebra Wikipedia: http://fi.wikipedia.org/wiki/lausekalkyyli