430 likes | 713 Views
Bagian 3 Integer. Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung 2013. IF5011 Sistem dan Arsitektur Komputer B. Pembahasan. Representasi dan pengkodean integer Unsigned Signed / two ’ s complement Operasi integer Penjumlahan Perkalian Pemrograman integer
E N D
Bagian 3Integer Sekolah Teknik Elektro dan InformatikaInstitut Teknologi Bandung2013 IF5011 Sistem dan Arsitektur Komputer B
Pembahasan • Representasi dan pengkodean integer • Unsigned • Signed / two’s complement • Operasi integer • Penjumlahan • Perkalian • Pemrograman integer • Aturan pada C • Overflow • Operasi shift pada perkalian atau pembagian dengan 2.
Representasi Integer • Integer direpresentasikan dengan dua cara : • Bilangan tidak negatif (unsigned) • Bilangan negatif, nol dan positif (two’s complement/signed) • Tipe data integer pada bahasa C :
Pengkodean Integer Unsigned : B2U(X) : binary to unsigned, dgn panjang w bit memetakan urutan ‘0’ dan ‘1’ sepanjang w bit menjadi bilangan tidak negatif Signed / Two’s complement : B2T(X) : binary to two’s comp, dgn panjang w bit bit tanda • Pada two’s complement, bit MSB digunakan sebagai bit tanda • 0 untuk bilangan tidak negatif • 1 untuk bilangan negatif
Contoh Pengkodean Integer • Nilai numerik untuk setiap kemungkinan digit (asumsi w = 4)
Contoh Pengkodean Integer short int x = 12345 short int y = -12345 • short pada C memiliki ukuran 2 byte
Nilai Minimum dan Maksimum • Nilai unsigned • UMin = 0 000…0 • UMax = 2w – 1 111…1 • Nilai two’s complement • TMin = –2w–1 100…0 • TMax = 2w–1 – 1 011…1 Nilai untuk w = 16
Ukuran Word Berbeda • Perhatikan : • |TMin | = TMax + 1 • Range pada two’s complement berbentuk asimetrik • Dapat menjadi sumber bug • UMax = 2 * TMax + 1
X B2U(X) B2T(X) 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 8 –8 1001 9 –7 1010 10 –6 1011 11 –5 1100 12 –4 1101 13 –3 1110 14 –2 1111 15 –1 Nilai Numerik Signed dan Unsigned • Ekivalensi • Kode sama untuk nilai non negatif • Unik • Setiap pola bit merepresentasikan nilai integer yang unik • Setiap representasi integer memiliki kode bit yang unik Dapat dipetakan terbalik • U2B(x) = B2U-1(x) • Pola bit untuk unsigned integer • T2B(x) = B2T-1(x) • Pola bit untuk two’s comp integer
Two’s Comp Unsigned T2U x ux T2B B2U X Pola bit tetap sama Relasi Antara Signed dan Unsigned
Casting Signed ke Unsigned • Bahasa C dapat melakukan casting dari Signed ke Unsigned • Nilai diperoleh • Tidak ada perubahan representasi bit • Nilai non negatif tidak berubah • ux = 12345 • Nilai negatif berubah menjadi nilai positif yang besar • uy = 53191 short int x = 12345; unsigned short int ux = (unsigned short) x; short int y = -12345; unsigned short int uy = (unsigned short) y;
Casting Signed ke Unsigned uy = y + 2 * 32768 = y + 65536
Signed dan Unsigned dalam C • Konstanta • Secara default dianggap sebagai signed integer • Unsigned jika terdapat “U” sebagai suffix 0U, 4294967259U • Casting • Casting secara eksplisit antara signed dan unsigned sama dengan U2T dan T2U int tx, ty; unsigned ux, uy; tx = (int) ux; uy = (unsigned) ty; • Casting implicit juga terjadi pada assignment dan pemanggilan prosedur tx = ux; uy = ty;
Casting Surprise • Penjelasan ekspresi • Jika unsigned dan signed dicampurkan dalam satu ekspresi, maka secara implisit nilai signed di-cast menjadi unsigned • Termasuk operasi perbandingan <, >, ==, <=, >= • Contoh untuk W = 32 • Konstanta1 Konstanta2 Relasi Evaluasi 0 0U -1 0 -1 0U 2147483647 -2147483648 2147483647U -2147483648 -1 -2 (unsigned) -1 -2 2147483647 2147483648U 2147483647 (int) 2147483648U 0 0U == unsigned -1 0 < signed -1 0U > unsigned 2147483647 -2147483648 > signed 2147483647U -2147483648 < unsigned -1 -2 > signed (unsigned) -1 -2 > unsigned 2147483647 2147483648U < unsigned 2147483647 (int) 2147483648U > signed
UMax UMax – 1 TMax + 1 TMax TMax Unsigned Range 0 0 2’s Comp. Range –1 –2 TMin Penjelasan Casting Surprise • 2’s Comp. Unsigned • Urutan terbalik • Negatif Positif dengan nilai besar
w X • • • • • • X • • • • • • w k Ekstensi Tanda • Tugas : • Diberikan bilangan signed integer x dengan w-bit • Konversi menjadi integer w+k-bit dengan nilai sama • Aturan : • Bit tanda dicopy sebanyak k : • X = xw–1 ,…, xw–1 , xw–1 , xw–2 ,…, x0 MSB dicopy sebanyak k
Desimal Heksadesimal Biner 12345 x 30 39 00110000 00111001 12345 ix 00 00 30 39 00000000 00000000 00110000 00111001 -12345 y CF C7 11001111 11000111 -12345 iy FF FF CF C7 11111111 11111111 11001111 11000111 Contoh Ekstensi Tanda short int x = 12345; int ix = (int) x; short int y = -12345; int iy = (int) y; • Konversi data integer dari kecil ke besar • Compiler C secara otomatis melakukan ekstensi tanda
w X - • • • X - + • • • w+1 Pembuktian Ekstensi Tanda • Membuktikan kebenaran, dengan induksi pada k • Tahap induksi : Menambah satu bit tidak mengubah nilai • Kunci penyelesaian : –2w–1 = –2w +2w–1 • Perhatikan bobot pada bit yang lebih atas : X–2w–1xw–1 X–2wxw–1+ 2w–1xw–1 = –2w–1xw–1
-1 x 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 1 + ~x 0 1 1 0 0 0 1 0 Bilangan Negatif • Membuat bilangan negatif dengan operasi komplemen dan increment • Dapat dilakukan sesuai aturan pada 2’s Complement ~x + 1 == -x • Komplemen • Observasi: ~x + x == 1111…112 == -1 • Increment • ~x + x + (-x + 1) == -1 + (-x + 1) • ~x + 1 == -x
Contoh Komplemen + Increment x = 12345 0
• • • • • • • • • • • • Penjumlahan Unsigned u Operand: w bit v + Hasil penjumlahan : w+1 bit u + v UAddw(u , v) Abaikan carry : w bit • Fungsi penjumlahan standar • carry output diabaikan • Implementasi Modular Arithmetic s = UAddw(u , v) = u + v mod 2w
Penjumlahan Integer Add4(u , v) • Penjumlahan integer • Integer 4-bit u, v • Hitung hasil penjumlahan Add4(u , v) • Nilai bertambah secara linier dengan u dan v • Membentuk permukaan planar v u
2w+1 2w 0 Penjumlahan Unsigned Overflow • Berputar • Jika hasil penjumlahan ≥ 2w • Sebanyak-banyaknya satu kali UAdd4(u , v) Hasil sesungguhnya Overflow v u Hasil modular
Sifat Matematika • Penjumlahan modular membentuk suatu kelompok Abelian • Tertutup pada penjumlahan 0 UAddw(u , v) 2w –1 • Komutatif UAddw(u , v) = UAddw(v , u) • Asosiatif UAddw(t, UAddw(u , v)) = UAddw(UAddw(t, u ), v) • 0 adalah identitas penjumlahan UAddw(u , 0) = u • Setiap elemen memiliki inversi penjumlahan • Bila UCompw (u ) = 2w – u UAddw(u , UCompw (u )) = 0
• • • • • • • • • • • • Penjumlahan Two’s Complement u Operan : w bit v + Hasil penjumlahan : w+1 bit u + v TAddw(u , v) Abaikan carry : w bit • Tadd dan UAdd memiliki perilaku bit yang sama • Penjumlahan signed dan unsigned pada C: int s, t, u, v; s = (int) ((unsigned) u + (unsigned) v); t = u + v • Diperoleh s == t
Hasil Sesungguhnya 0 111…1 2w–1 Hasil TAdd 0 100…0 2w –1 011…1 0 000…0 0 000…0 PosOver TAdd(u , v) 1 100…0 –2w –1 100…0 > 0 –2w 1 000…0 v < 0 < 0 > 0 u NegOver Karakterisasi TAdd Hasil penjumlahan sesungguhnya memerlukan w+1 bit MSB dibuang Perlakukan bit sisanya sebagai integer 2’s comp PosOver NegOver (NegOver) (PosOver)
Penjumlahan 2’s Complement NegOver • Nilai • 4-bit two’s comp. • Berkisar antara -8 dan +7 • Berputar • Jika jumlah 2w–1 • Menjadi negatif • Sebanyak-banyak nya satu kali • Jika jumlah < –2w–1 • Menjadi positif • Sebanyak-banyak nya satu kali TAdd4(u , v) v u PosOver
2w–1 PosOver 2w –1 0 NegOver Mendeteksi Overflow • Tugas • Diketahuis = TAddw(u , v) • Tentukan jika s =Addw(u , v) • Contoh int s, u, v; s = u + v; • Aturan • Overflow jika : u, v < 0, s 0 (Overflow Negatif) u, v 0, s < 0 (Overflow Positif) ovf = (u<0 == v<0) && (u<0 != s<0);
Sifat Matematika TAdd • Aljabar isomorphic • TAddw(u , v) = U2T(UAddw(T2U(u ), T2U(v))) • Keduanya memiliki pila bit sama • Tadd Two’s Complement membentuk group • Tertutup, Komutatif, Asosiatif, 0 sebagai identitas penjumlahan • Setiap elemen memiliki inversi penjumlahan Bila TCompw (u ) = U2T(UCompw(T2U(u )) TAddw(u , TCompw (u )) = 0
Operasi Perkalian • Menghitung hasil kali sesungguhnya bilangan of w-bit x, y • signed atau unsigned • Jangkauan nilai • Unsigned: 0 ≤ x * y ≤ (2w – 1) 2 = 22w – 2w+1 + 1 • hingga 2w bits • Two’s complement min: x * y ≥ (–2w–1)*(2w–1–1) = –22w–2 + 2w–1 • hingga 2w–1 bits • Two’s complement maks:x * y ≤ (–2w–1) 2 = 22w–2 • hingga 2w bits,tetapi hanya bagi (TMinw)2 • Menjaga hasil eksak • Harus memperluas ukuran word sesuai dengan hasil perkalian • Dilakukan dalam software oleh “arbitrary precision” arithmetic packages
• • • • • • • • • • • • • • • Perkalian Unsigned Dalam C u Operan : w bit v * u · v Hasil kali : 2*w bit UMultw(u , v) Abaikan w bit : w bit Fungsi perkalian standar • Sebanyak w bit orde tinggi diabaikan Implementasi Modular Arithmetic UMultw(u , v) = u · v mod 2w
Perkalian Signed dan Unsigned • Perkalian unsigned unsigned ux = (unsigned) x; unsigned uy = (unsigned) y; unsigned up = ux * uy • Memotong hasil kali menjadi bilangan w-bit up= UMultw(ux, uy) • Aritmatika modular : up = uxuy mod 2w • Perkalian two’s complement int x, y; int p = x * y; • Menghitung hasil kali eksak dari dua bilangan w-bit x, y • Memotong hasil kali menjadi bilangan w-bit p = TMultw(x, y)
Perkalian Signed dan Unsigned • Perkalian unsigned unsigned ux = (unsigned) x; unsigned uy = (unsigned) y; unsigned up = ux * uy • Perkalian two’s complement int x, y; int p = x * y; • Relasi • Perkalian signed memberikan hasil bit sama dengan unsigned • up == (unsigned) p
• • • Perkalian Kelipatan 2k dgn Shift • Operasi • u << k menghasilkan u * 2k • keduanya signed dan unsigned • Contoh : • u << 3 == u * 8 • u << 5 - u << 3 == u * 24 • Pada banyak mesin, ‘shift and add’ lebih cepat dari perkalian • Compiler menghasilkan kode ini secara otomatis k u • • • Operan : w bit 2k * 0 ••• 0 1 0 ••• 0 0 u · 2k Hasil kali : w+k bit 0 ••• 0 0 UMultw(u , 2k) ••• 0 ••• 0 0 Abaikan k bit : w bit TMultw(u , 2k)
••• ••• Pembagian Kelipatan 2k dgn Shift • Pembagian unsigned • u >> k menghasilkan u / 2k • Menggunakan logical shift k u Binary Point ••• Operan : 2k / 0 ••• 0 1 0 ••• 0 0 u / 2k Pembagian : . 0 ••• ••• Hasil : u / 2k 0 ••• •••
••• k x Binary Point ••• Operan : 2k / 0 ••• 0 1 0 ••• 0 0 ••• x / 2k Pembagian : . 0 ••• ••• Hasil : RoundDown(x / 2k) 0 ••• ••• Pembagian Kelipatan 2k dgn Shift • Pembagian signed • x >> k menghasilkan x / 2k • Mengunakan arithmetic shift • Rounding ke arah yang salah jika u < 0
Koreksi Pembagian dgn 2k • Pembagian bilangan negatif dengan 2k • Ingin diperoleh x / 2k (Rounding menuju 0) • Dihitung (x+2k-1)/ 2k • Pada C: (x + (1<<k)-1) >> k • Bias pembilang mendekati 0 • Kasus 1: Tidak ada rounding k u Pembilang : 1 ••• 0 ••• 0 0 +2k +–1 0 ••• 0 0 1 ••• 1 1 Binary Point 1 ••• 1 ••• 1 1 Penyebut : / 2k 0 ••• 0 1 0 ••• 0 0 u / 2k . 0 1 ••• 1 1 1 ••• 1 ••• 1 1 • Tidak ada pengaruh dari bias
Koreksi Pembagian dgn 2k Kasus 2 : Rounding k x Pembilang : 1 ••• ••• +2k +–1 0 ••• 0 0 1 ••• 1 1 1 ••• ••• ditambah 1 Binary Point 2k Penyebut : / 0 ••• 0 1 0 ••• 0 0 x / 2k . 0 1 ••• 1 1 1 ••• ••• • Bias menambah 1 pada hasil akhir ditambah 1
Sifat-Sifat Aritmatika Unsigned • Perkalian unsigned dengan penjumlahan membentuk ring komutatif • Penjumlahan adalah kelompok komutatif • Tertutup pada perkalian 0 UMultw(u , v) 2w –1 • Komutatif perkalian UMultw(u , v) = UMultw(v , u) • Asosiatif perkalian UMultw(t, UMultw(u , v)) = UMultw(UMultw(t, u ), v) • 1 adalah identitas perkalian UMultw(u , 1) = u • Distributif UMultw(t, UAddw(u , v)) = UAddw(UMultw(t, u ), UMultw(t, v))
Sifat-Sifat Aritmatika 2’s Comp • Aljabar isomorphic • Perkalian dan penjumlahan unsigned • Pemotongan hingga w bit • Perkalian dan penjumlahan two’s complement • Pemotongan hingga w bits • Keduanya membentuk Ring • Isomorphic pada integer ring mod 2w • Perbandingan dengan aritmatika integer • Keduanya adalah ring • Integers mengijinkan urutan sifat seperti : u > 0 u + v > v u > 0, v > 0 u · v > 0 • Sifat-sifat tersebut tidak berlaku pada aritmatika two’s complement TMax + 1 == TMin 15213 * 30426 == -10030 (16-bit words)