Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung 2013 IF5011 Sistem dan Arsitektur Komputer B Bagian 3 Integer Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung 2013
Pembahasan Representasi dan pengkodean integer Operasi 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 : Deklarasi C Ukuran Nilai Minimum Nilai Maksimum char unsigned char 8 bit (1 byte) -128 127 255 short [int] unsigned short [int] 16 bit (2 byte) -32.768 32.767 63.535 int unsigned [int] 32 bit (4 byte) -2.147.483.648 2.147.483.647 4.294.967.295
Pengkodean Integer Unsigned : Signed / Two’s complement : 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) Biner B2U4(X) B2T4(X) 0000 0011 21+20 = 3 21+20 = 3 1000 23 = 8 -23 = -8 1010 23+21 = 10 -23+21 = -6 1100 23+22 = 12 -23+22 = -4 1111 23+22+21+20 = 15 -23+22+21+20 = -1
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 Desimal Heksa Biner Umin Umax 65535 0x0000 0XFFFF 00000000 00000000 11111111 11111111 Tmin Tmax -32768 32767 0x8000 0x7FFF 10000000 00000000 01111111 11111111 -1 0xFFFF
Ukuran Word Berbeda Perhatikan : |TMin | = TMax + 1 Range pada two’s complement berbentuk asimetrik Dapat menjadi sumber bug UMax = 2 * TMax + 1
Nilai Numerik Signed dan Unsigned X B2T(X) B2U(X) 0000 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 –8 8 –7 9 –6 10 –5 11 –4 12 –3 13 –2 14 –1 15 1000 1001 1010 1011 1100 1101 1110 1111 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
Relasi Antara Signed dan Unsigned T2U T2B B2U Two’s Comp Unsigned Pola bit tetap sama x ux X Two’s Bin Unsg 0000 1 0001 7 0111 -8 1000 8 -7 1001 9 -2 1110 14 -1 1111 15
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 0 0U == unsigned 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
Penjelasan Casting Surprise TMax TMin –1 –2 UMax UMax – 1 TMax + 1 2’s Comp. Range Unsigned 2’s Comp. Unsigned Urutan terbalik Negatif Positif dengan nilai besar
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 • • • X X w k MSB dicopy sebanyak k
Contoh Ekstensi Tanda Konversi data integer dari kecil ke besar short int x = 12345; int ix = (int) x; short int y = -12345; int iy = (int) y; Desimal Heksadesimal Biner x 12345 30 39 00110000 00111001 ix 00 00 30 39 00000000 00000000 00110000 00111001 y -12345 CF C7 11001111 11000111 iy FF FF CF C7 11111111 11111111 11001111 11000111 Konversi data integer dari kecil ke besar Compiler C secara otomatis melakukan ekstensi tanda
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–1 xw–1 X –2w xw–1 + 2w–1 xw–1 = –2w–1 xw–1 - • • • X X + w+1 w
Bilangan Negatif x ~x + -1 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 1 x ~x + -1
Contoh Komplemen + Increment x = 12345
Penjumlahan Unsigned Fungsi penjumlahan standar • • • Operand: w bit + v • • • Hasil penjumlahan : w+1 bit u + v • • • Abaikan carry : w bit UAddw(u , v) • • • Fungsi penjumlahan standar carry output diabaikan Implementasi Modular Arithmetic s = UAddw(u , v) = u + v mod 2w
Penjumlahan Integer Penjumlahan integer Integer 4-bit u, v 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
Penjumlahan Unsigned Berputar Jika hasil penjumlahan ≥ 2w Overflow Berputar Jika hasil penjumlahan ≥ 2w Sebanyak-banyaknya satu kali UAdd4(u , v) Hasil sesungguhnya 2w 2w+1 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 • • • Operan : w bit + v • • • Hasil penjumlahan : w+1 bit u + v • • • Abaikan carry : w bit TAddw(u , v) • • • 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
Karakterisasi TAdd Hasil penjumlahan sesungguhnya memerlukan w+1 bit 2w –1 2w–1 Hasil Sesungguhnya Hasil TAdd 1 000…0 1 100…0 0 000…0 0 100…0 0 111…1 100…0 000…0 011…1 Hasil penjumlahan sesungguhnya memerlukan w+1 bit MSB dibuang Perlakukan bit sisanya sebagai integer 2’s comp PosOver u v < 0 > 0 NegOver PosOver TAdd(u , v) 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 TAdd4(u , v) v u PosOver
Mendeteksi Overflow Tugas Diketahui s = 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); 2w –1 2w–1 PosOver NegOver
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 • • • Operan : w bit * v • • • Hasil kali : 2*w bit u · v • • • • • • 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 = ux uy 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 ••• 1 ••• Hasil kali : w+k bit u · 2k • • • ••• UMultw(u , 2k) ••• ••• 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 ••• 1 ••• Pembagian : u / 2k . ••• ••• ••• Hasil : u / 2k ••• •••
Pembagian Kelipatan 2k dgn Shift Pembagian signed x >> k menghasilkan x / 2k Mengunakan arithmetic shift Rounding ke arah yang salah jika u < 0 1 ••• x 2k / x / 2k Pembagian : Operan : k RoundDown(x / 2k) Hasil : . Binary Point
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 Pembilang : u 1 ••• ••• +2k +–1 ••• 1 ••• 1 1 Binary Point 1 ••• 1 ••• 1 1 Penyebut : / 2k ••• 1 ••• u / 2k . 1 ••• 1 1 1 ••• 1 ••• 1 1 Tidak ada pengaruh dari bias
Koreksi Pembagian dgn 2k Kasus 2 : Rounding k Pembilang : x 1 ••• ••• +2k +–1 ••• 1 ••• 1 1 1 ••• ••• ditambah 1 Binary Point Penyebut : / 2k ••• 1 ••• x / 2k . 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)