Professional Documents
Culture Documents
Tof-21-5 Bitar-Heiltölur
Tof-21-5 Bitar-Heiltölur
Hjálmtýr Hafsteinsson
Haust 2021
Byggt á glærum eftir Bryant og O'Hallaron
miðla 1.1V
0.9V
0.2V
0.0V
Getum talið í tvíundarkerfi
• Táknum tölur með grunninum 2
Heiltala (integer)
3 B 6 D
Sextándakerfið (Hex)
• Oft notað í stað tvíundarkerfisins
– Auðvelt að breyta fram og til baka
• Hver sextándastafur er 4 bitar
• Breyting úr/í tugakerfið er flóknari
– Krefst margföldunar/deilingar
char 1 1 1
short 2 2 2
int 4 4 4
long 4 8 8
float 4 4 4
double 8 8 8
bendir 4 8 8
Boole-algebra
• Sett fram af George Boole í kringum 1850
– Algebruleg framsetning á rökfræði
• Kóðum “Satt” sem 1 og “Ósatt” sem 0
OG EÐA
◼ A&B = 1 þegar bæði A=1 og B=1 ◼ A|B = 1 þegar A=1 eða B=1
EKKI
Annaðhvort-eða (Xor)
◼ ~A = 1 þegar A=0
◼A^B = 1 þegar annað hvort A=1
eða B=1, ekki bæði
Almennar Boole-algebrur
• Vinna á bitafylkjum
– Aðgerðirnar vinna á hvern bita fyrir sig (bitwise)
01101001 01101001 01101001
& 01010101 | 01010101 ^ 01010101 ~ 01010101
01000001
01000001 01111101
01111101 00111100
00111100 10101010
10101010
• Táknun
– Bitafylki af stærð w táknar hlutmengi í {0, …, w–1}
– aj = 1 þþaa j ∈ A
01101001 { 0, 3, 5, 6 } 01010101 { 0, 2, 4, 6 }
76543210 76543210
• Aðgerðir
– & Sniðmengi 01000001 { 0, 6 }
– | Sammengi 01111101 { 0, 2, 3, 4, 5, 6 }
– ^ Samhverfur mengjamunur 00111100 { 2, 3, 4, 5 }
– ~ Fylling 10101010 { 1, 3, 5, 7 }
Bitaaðgerðir í C
• Virkjarnir &, |, ~, ^ eru í C
– Vinna með öll grunngagnatög 0 0 0000
• long, int, short, char, unsigned 1 1 0001
2 2 0010
– Viðföng tekin sem bitafylki 3 3 0011
– Aðgerðum beitt bita fyrir bita (bitwise) 4 4 0100
5 5 0101
• Dæmi (gagnatagið char) 6 6 0110
7 7 0111
– ~0x41 → 0xBE 8 8 1000
• ~010000012 → 101111102 9 9 1001
– 0x69 & 0x55 → 0x41 A 10 1010
• 011010012 & 010101012 → 010000012 B 11 1011
C 12 1100
– 0x69 | 0x55 → 0x7D D 13 1101
• 011010012 | 010101012 → 011111012 E 14 1110
F 15 1111
Bitaaðgerðir í C
• Virkjarnir &, |, ~, ^ eru í C
– Vinna með öll grunngagnatög 0 0 0000
• long, int, short, char, unsigned 1 1 0001
2 2 0010
– Viðföng tekin sem bitafylki 3 3 0011
– Aðgerðum beitt bita fyrir bita (bitwise) 4 4 0100
5 5 0101
• Dæmi (gagnatagið char) 6 6 0110
7 7 0111
– ~0x41 → 0xBE 8 8 1000
• ~010000012 → 101111102 9 9 1001
– 0x69 & 0x55 → 0x41 A 10 1010
• 011010012 & 010101012 → 010000012 B 11 1011
C 12 1100
– 0x69 | 0x55 → 0x7D D 13 1101
• 011010012 | 010101012 → 011111012 E 14 1110
F 15 1111
Rökvirkjar í C
• Berum saman við rökvirkjana: &&, ||, !
– Túlka 0 sem “Ósatt”
Ruglið ekki saman && og &
– Allt sem er ekki-núll er “Satt” (|| og |). Algeng uppspretta
– Skila alltaf 0 eða 1 erfiðra forritunarvilla í C
– Skammhlaup (short circuit) í rökyrðingum
• Dæmi (gagnatagið char)
if (p && fun(*p)) ...
– !0x41 → 0x00
– !0x00 → 0x01
Kemur í veg fyrir
– !!0x41→ 0x01 notkun á null-bendi
– 0x69 && 0x55 → 0x01
– 0x69 || 0x55 → 0x01
Hliðrunarvirkjar
• Vinstri hliðrun: x << y Viðfang x 01100010
– Hliðra bitafylki x til vinstri um y sæti << 3 00010000
• Henda burtu aukabitum til vinstri
Rökf. >> 2 00011000
• Fylla með 0-um hægra megin
• Hægri hliðrun: x >> y Reikn. >> 2 00011000
-16 8 4 2 1
8+2 = 10
10 = 0 1 0 1 0
-16 8 4 2 1
-16+4+2 = -10
-10 = 1 0 1 1 0
Tvíandhverfa - dæmi
Weight 15213 -15213
1 1 1 1 1
x = 15213: 00111011 01101101 2 0 0 1 2
y = -15213: 11000100 10010011 4 1 4 0 0
8 1 8 0 0
16 0 0 1 16
32 1 32 0 0
64 1 64 0 0
128 0 0 1 128
256 1 256 0 0
512 1 512 0 0
1024 0 0 1 1024
2048 1 2048 0 0
4096 1 4096 0 0
8192 1 8192 0 0
16384 0 0 1 16384
-32768 0 0 1 -32768
Sum 15213 -15213
Myndræn sýn
– 23 = –8
23 =8 22 = 4
22 = 4 21 = 2
21 = 2 20 = 1
20 = 1 –8 –7 –6 –5 –4 –3 –2 –1 0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[0001]
[0001] [0101]
[0101]
[1011]
[1011]
[1111] [1111]
• Athugið: • C forritun
– #include <limits.h>
– |TMin | = TMax + 1
– Skilgreinir fasta, t.d.:
• Ósamhverft talnabil
• ULONG_MAX
– UMax = 2 * TMax + 1 • LONG_MAX
• LONG_MIN
– Gildin fara eftir umhverfinu
Talnagildi með/án formerkis
X B2U(X) B2T(X)
0000 0 0
• Jafngildi
0001 1 1 – Sama kóðun fyrir jákvæð gildi
0010 2 2
0011 3 3
• Einkvæmni
0100 4 4 – Hvert bitamynstur táknar ólíka
0101 5 5 heiltölu
0110 6 6
– Hver táknanleg heiltala hefur
0111 7 7
1000 8 –8 einkvæmt bitamynstur
1001 9 –7 • Getum snúið vörpunum við
1010 10 –6
1011 11 –5
– U2B(x) = B2U-1(x)
1100 12 –4 • Bitamynstur fyrir jákvæða heiltölu
1101 13 –3 – T2B(x) = B2T-1(x)
1110 14 –2
• Bitamynstur fyrir tvíandhverfa heiltölu
1111 15 –1
Tala án formerkis ↔ tvíandhverfu tala
w–1 0
ux + + + ••• + + +
x - + + ••• + + +
Tvíandhverfubil 0 0
–1
–2
TMin
Heiltölur með formerki í C
• Fastar eru sjálfkrafa með formerki
– Heiltölur án formerkis verða að hafa "U" aftast
0U, 4294967259U
• Helstu reglur:
– Bitamynstur halda sér
– ... en eru túlkuð á annan hátt
– Getur hafa óvæntar afleiðingar:
• Samlagning eða frádráttur á 2w