Begreber og Redskaber 3 BRP
Simple datatype Tal: heltal og kommatal Logiske værdier Tegn Vi venter med strenge, tabeller, referencer Operationer Værdiernes repræsentation i maskinen Pladsforbrug og repæsentation Formål: forstå hvordan – ikke eksperter i binær hovedregning
Computer Beregningsenhed (CPU) Internt lager (RAM) Fjernlager (Harddisk) Det interne lager Program, der skal udføres Data, der bruges af program En lang sekvens af ”bytes”
Computer RAM Tastatur CPU Skærm Mus Harddisk Cache CD-ROM Ydre enheder Registre Mus Harddisk Cache CD-ROM
2 potenser Regne med potenser x0 = 1 for x andet end 0 xa+b = xa∙xb 20 = 1, 21 = 2, 22 = 4, 23 = 8 , 24 = 16 25 = 32 , 26 = 64, 27 = 128, 28 = 256 210 = 1024 ≈ 103 (1 k) 220 = 210 *210 ≈ 106 = 1.000.000 (1M) 230 ≈ 109 = 1.000.000.000 (1G)
Binære tal 10-tals system: 34641 = 2-tals system: 10101 = 3 ∙ 10000 + 4 ∙ 1000 + 6 ∙ 100 + 4 ∙ 10 + 1 ∙ 1 2-tals system: 10101 = 1 ∙ 16 + 0 ∙ 8 + 1 ∙ 4 + 0 ∙ 2 +
Byte En byte = 8 bit Et tal i 2-talssystemet 110001 = 1*25 +1*24 +1*20 = 1*32 +1*16 +1*1 = 49 = 4*101 +9*100 = 4*10 +9*1 1
Interval Største tal i en byte 1*27+1*26+1*25+1*24+1*23+1*22+1*21+1*20 = 255 Interval: 0..255 , dvs 256 forskellige tal I 16 bit: 216 =65534 forskellige tal I 32 bit: 232 =4.294.705.156 forskellige tal 1
Tælle binært 0: 1: 2: 3: 4: 5: 6: 7: 1 1 1 1 1 1 1
Negative tal Mulighed 1: Brug fortegnsbit og resten til selve tallet Problem: +0 og –0 To-komplement Inverter bitmønster og læg en til (!) 49 inverter +1, fortegn 1 1 1
Tælle binært 1 -128: .. -2: -1: 0: 1: 127: 1 1 1 1
Regning Ulempe: Skævt interval: -128..127 Fordel: regning er nemt: -2 +1 =-1: +1: =0: Ignorer cifre, der løber over efter 8. bit 1 1 1 1
Regneoperationer på tal + Addition - Subtraktion * Multiplikation / Division % Rest ved division - Ændre fortegn 7 / 3 = 2 7%3 = 1
Højre/venstreskift << Venstreskift (indsæt 0 til højre) (*2) 49: 49<<1: =98 >> Højreskift (dupler fortegn) (/2) >>> Højreskift (indsæt 0 til venstre) -2 -2>>>1: 1 1 1 1
Oktal og hexadecimal Binært: Oktalt: 3 bits til oktalt ciffer: 061 = 6*8+1 Hexadecimalt: 4 bits til hexadecimalt ciffer 31 = 3*16+1 Hex cifre: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F BAD16 = 11*256+10*16+13 = 298910 1
Heltalstyper i Java byte: -128 .. 127 short: -32768 .. 32767 int: -2147483648 .. 2147483647 long: -9223372036854775808 .. 9223372036854775807 (8, 16, 32 og 64 bits) char: ’\u0000’ ..’\uFFFF’ (16 bit unicode tegn)
Logiske værdier boolean: true eller false Operationer: && logisk og || logisk eller ^ logisk eksklusiv eller ! logisk negation
Logiske værdier Eksempler (i>=0) && (i <= 10) (svar==’j’) || (svar==’n) !((svar==’j’) || (svar==’n)) (svar!=’j’) && (svar!=’n) (i==0)==true er det samme som (i==0)
Regne med logiske værdier !(p || q) = !p && !q !(p&&q) = !p || !q p && (q || r) = (p&&q) || (p&&r) p || (q && r) = (p||q) && (p||r) p q = !p || q
Bitoperationer ’logiske’ operationer på tal: ’&’ ’|’ ’^’ Der regnes som om ’true’ er 1 og ’false’ er 0 Sandhedstabeller ^ 1 & 1 | 1
Bitoperationer | bitvis eller & bitvis og ^ bitvis eksklusiv eller ~ inverter bitmønster 49: 49|7: 55 49&7: 1 49^7: 54 1 1 1 1
Kommatal Tal med en heltalsdel og nogle decimaler Og meget store tal, men uden alle cifre Og meget små tal – tæt på 0 Ide: repræsenter kommatal som fortegn og to tal fortegn * kommadel * 10eksponent
Entydighed 1*100 = 10*10-1 = .. Tal skal normaliseres, dvs være på formen fortegn*0,kommadel*10eksponent hvor kommadel skal starte med andet end nul Eller kommadel = eksponent = 0 og tallet er 0
Float Float: 4byte = 32 bit Eksponent 8 bits: -126..127 Kommadel: 23bit (+1) + fortegn Præcision: 224 =210*210*24≈16.000.000 ca 7 cifre Interval: 2127≈ 10? + e e 1 1 1
Dobbelt præcision double: 64 bit eller 8 byte 11 bit eksponent (op til 10308) 52 bit kommadel (ca 15 cifre)
Regne med kommatal Kommatal er ikke eksakte. Ved komplekse udregninger kan afrundingsfejl hobe sig op. Sammenlign ikke med =, men undersøg om forskel er mindre end en grænseværdi Træk ikke to næsten lige store tal fra hinanden Undgå gentagen sammenlægning af tal
Afrunding Jo mere præcision og jo større interval , jo mere plads er der brug for. En fornemmelse for 2 potenser og bitmønstre Hvis I skal regne med kommatal så pas på faldgruberne