EC33 - Sistem Komputer Bagian 2 Representasi dan Manipulasi Data dalam Bit dan Byte Departemen Teknik Elektro Institut Teknologi Bandung 25
Pembahasan Representasi informasi dalam bentuk bit Biner/Heksadesimal Representasi byte Bilangan Karakter dan string Instruksi Manipulasi level bit Aljabar Boolean Ekspresi dalam bahasa C Bit dan Byte 2-2
Representasi Berbasis 10 Representasi bilangan berbasis 10 Berasal dari jari manusia, dikenal sebagai digit Representasi yang biasa digunakan dalam transaksi finansial Digunakan juga dalam notasi ilmiah 1.2345 x 10 4 Sulit diimplementasikan secara elektronik Sulit untuk disimpan ENIAC (komputer elektronik pertama) menggunakan 10 tabung hampa untuk mengimplementasikan satu digit Sulit untuk dikirimkan Perlu kepresisian tinggi untuk mengkodekan 10 level sinyal pada satu kawat Sulit untuk mengimplementasikan fungsi logika digital Penjumlahan, perkalian, dll Bit dan Byte 2-3
Representasi Biner Representsi bilangan berbasis 2 12345 10 direpresentasikan 111111 2 1.20 10 direpresentasikan 1.11111111[11] 2 1.2345 X 10 4 direpresentasikan 1. 11111 2 X 2 13 Implementasi elektronik Elemen bistable dapat disimpan dengan mudah Andal bila dikirimkan melalui kawat yang tidak akurat dan ber-derau 3.3V 2.8V 0.5V 0.0V 0 1 0 Fungsi aritmatika dapat diimplemetasikan secara langsung Bit dan Byte 2-4
Mengkodekan Byte 1 byte = 8 bit Merepresentasikan bilangan : Biner dari 2 hingga 11111111 2 Desimal dari 0 10 hingga 255 10 Heksadesimal dari 16 hingga FF 16 Representasi bilangan berbasis 16 Menggunakan karakter 0 hingga 9 dan A hingga F Pada bahasa pemrograman C, FA1D37 16 ditulis 0xFA1D37 atau 0xfa1d37 Heksa Desimal Biner 0 0 1 1 01 2 2 10 3 3 11 4 4 01 5 5 0101 6 6 0110 7 7 0111 8 8 10 9 9 11 A 10 1010 B 11 1011 C 12 11 D 13 1101 E 14 1110 F 15 1111 Bit dan Byte 2-5
Ukuran Word Setiap komputer memiliki ukuran word tertentu Indikator ukuran data integer dan data pointer (alamat) Kebanyakan komputer saat ini, 1 word = 32 bit (4 byte) Membatasi alokasi alamat hingga 4GB (2 32 byte) Dari alamat. (0) hingga 1111. 1111 (4,294,967,295) Nilai ini menjadi terlalu kecil bila digunakan pada aplikasi scientific dan database yang perlu menggunakan memori secara intensif Sistem high-end menggunakan 64 bit (8 byte) Dapat mengalamati 1.8 X 10 19 byte Komputer dan compiler mendukung berbagai format data integer dan floating point memiliki kode dan panjang data berbeda Bit dan Byte 2-6
Organisasi Memori Alamat merupakan lokasi penyimpanan word data dalam memori Ukuran satu lokasi memori = satu byte Alamat menunjukkan lokasi byte pertama suatu word Alamat word berikutnya bertambah 4 (32 bit) atau 8 (64 bit) Perlu 4 lokasi memori untuk menyimpan data 32 bit 32-bit Addr =?? Addr = 04?? Addr = 08?? Addr = 12?? 64-bit Addr =?? Addr = 08?? Byte Alamat 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 Bit dan Byte 2-7
Representasi Data Ukuran data pada format C (dalam byte) Tipe data Tipikal 32-bit Alpha 64-bit Keterangan char 1 1 short int 2 2 int 4 4 long int 4 8 float 4 4 single precision double 8 8 double precision long double 8 8 char * 4 8 pointer Bit dan Byte 2-8
Aturan Pengurutan Byte Bagaimana setiap byte suatu word disusun dalam memori? Aturan : Mesin Sun dan Mac adalah mesin Big Endian Byte LSB (Least Significant Byte) terletak di alamat paling TINGGI Mesin Compaq Alpha dan PC adalah Little Endian Byte LSB (Least Significant Byte) terletak di alamat paling RENDAH Bit dan Byte 2-9
Contoh Urutan Byte Big Endian : byte LSB terletak di alamat paling tinggi Little Endian : byte LSB terletak di alamat paling rendah Contoh Variabel x memiliki representasi 4 byte : 0x01234567 dimana MSB = 0x01( 01) dan LSB = 0x67(0110 0111) Alamat awal yang diberikan oleh &x adalah 0x1 Big Endian Little Endian 0x1 0x101 0x102 0x103 01 23 45 67 0x1 0x101 0x102 0x103 67 45 23 01 Bit dan Byte 2-10
Membaca Urutan Byte Disassembly Mengartikan kode mesin Dihasilkan oleh suatu program yang dapat membaca kode mesin Contoh potongan program : Alamat Kode instruksi Bahasa Assembly 8048365: 5b pop %ebx 8048366: 81 c3 ab 12 add $0x12ab,%ebx 804836c: 83 bb 28 cmpl $0x0,0x28(%ebx) Mengartikan bilangan nilai : menjadi 4 bytes : dipisah per byte : 0x12ab 0x12ab 12 ab dibalik : ab 12 Bit dan Byte 2-11
Representasi Byte Data Kode untuk menampilkan representasi byte data Casting pointer menjadi unsigned char * menghasilkan array byte typedef unsigned char *pointer; void show_bytes(pointer start, int len) { int i; for (i = 0; i < len; i++) printf("0x%p\t0x%.2x\n", start+i, start[i]); printf("\n"); } casting = mengganti tipe data menggunakan instruksi typedef printf directives: %p : print pointer %x : print hexadecimal Bit dan Byte 2-12
Hasil Eksekusi show_bytes Program utama : int a = 12345; printf("int a = 12345;\n"); show_bytes((pointer) &a, sizeof(int)); Hasil diperoleh (Linux) : int a = 12345; 0x11ffffcb8 0x39 0x11ffffcb9 0x30 0x11ffffcba 0x 0x11ffffcbb 0x Bit dan Byte 2-13
Representasi Integer int A = 12345; int B = -12345; long int C = 12345; Desimal: 12345 Biner: 11 11 11 Heksa: 3 0 3 9 Linux/Alpha A Sun A Linux C Alpha C Sun C 39 30 Linux/Alpha B C7 CF FF FF 30 39 Sun B FF FF CF C7 39 30 39 30 Representasi two s complement 30 39 Bit dan Byte 2-14
Representasi Pointer (Alamat) int B = -12345; int *P = &B; Alamat Alpha Heksa: 1 F F F F F C A 0 Biner: 01 1111 1111 1111 1111 1111 11 1010 Sun P EF FF FB 2C Alamat Sun Heksa: E F F F F B 2 C Biner: 1110 1111 1111 1111 1111 1011 10 11 Alamat Linux Heksa: B F F F F 8 D 4 Biner: 1011 1111 1111 1111 1111 10 1101 01 Alpha P A0 FC FF FF 01 D4 F8 FF BF Mesin dan compiler berbeda akan memberikan lokasi obyek berbeda Bit dan Byte 2-15
Representasi Floating Point Float F = 12345.0; Linux/Alpha F E4 40 46 Sun F 46 40 E4 IEEE Single Precision Floating Point Representation Heksa: 4 6 4 0 E 4 0 0 Biner: 01 0110 01 1110 01 12345: 11 1110 01 Tidak sama dengan representasi integer, tetapi konsisten di semua mesin Memperlihatkan relasi dengan integer, walau tidak terlihat jelas Bit dan Byte 2-16
Representasi String Strings dalam bahasa C Direpresentasikan dalam array karakter Setiap karakter dikodekan dalam format ASCII Kode karakter standar 7-bit Karakter 0 memiliki kode 0x30 Digit i memiliki kode 0x30+i String harus diakhiri dengan null Kompatibilitas Karakter akhir = 0 Setiap sistem yang menggunakan ASCII untuk menkodekan karakter akan memberikan hasil yang sama Data teks umumnya bersifat platformindependen Kecuali jika ada aturan lain tentang karakter akhir suatu baris char S[6] = "12345"; Linux/Alpha S Sun S Bit dan Byte 2-17 31 32 33 34 35 31 32 33 34 35
Representasi Kode Mesin Program dikodekan menjadi urutan instruksi Masing-masing berupa operasi sederhana Operasi aritmatika Membaca atau menulis memori Percabangan Instruksi dikodekan sebagai byte Instruksi pada Alpha, Sun, Mac menggunakan 4 byte Reduced Instruction Set Computer (RISC) PC menggunakan instruksi dengan panjang yang variabel Complex Instruction Set Computer (CISC) Setiap mesin memiliki jenis instruksi dan pengkodean berbeda Umumnya kode tidak binary compatible Program juga merupakan urutan byte Bit dan Byte 2-18
Representasi Instruksi int sum(int x, int y) { return x+y; } Pada contoh ini, Alpha & Sun menggunakan dua instruksi dengan panjang 4 byte Pada kasus lain memakai jumlah instruksi berbeda PC menggunakan 7 instruksi dengan panjang 1, 2, dan 3 byte Sama dengan NT dan Linux NT / Linux tidak fully binary compatible Alpha sum 30 42 01 80 FA 6B Sun sum 81 C3 E0 08 90 02 09 PC sum 55 89 E5 8B 45 0C 03 45 08 89 EC 5D C3 Mesin yang berbeda menggunakan instruksi dan kode berbeda Bit dan Byte 2-19
Aljabar Boolean Bit dan Byte 2-20
Aljabar Boolean AND NOT Dikembangkan oleh George Boole pada abad 19 Representasi logika aljabar : 1 = TRUE dan 0 = FALSE A&B = 1 jika A=1 dan B=1 & 0 1 0 0 0 1 0 1 ~A = 1 jika A=0 ~ 0 1 1 0 OR A B = 1 jika A=1 atau B=1 0 1 0 0 1 1 1 1 Exclusive-Or (XOR) A^B = 1 jika A=1 atau B=1, tapi tidak keduanya ^ 0 1 0 0 1 1 1 0 Bit dan Byte 2-21
Aplikasi Aljabar Boolean Digunakan pada sistem digital oleh Claude Shannon Tesis Master di MIT 1937 Pemikiran tentang jaringan saklar relay Mengkodekan saklar tertutup = 1, saklar terbuka= 0 A&~B A ~B ~A B ~A&B Koneksi terjadi bila: A&~B ~A&B = A^B Bit dan Byte 2-22
Integer Aritmatika Integer aritmatika memiliki struktur matematika yang dikenal sebagai Ring disebut juga Integer Ring Z, +, *,, 0, 1 = Ring + adalah operasi tambah * adalah operasi kali adalah penjumlahan inversi 0 adalah identitas untuk tambah 1 adalah identitas untuk kali Bit dan Byte 2-23
Aljabar Boolean {0,1},, &, ~, 0, 1 = Aljabar Boolean (OR) adalah operasi tambah & (AND) adalah operasi kali ~ adalah operasi komplemen (bukan penjumlahan inversi) 0 adalah identitas untuk tambah 1 adalah identitas untuk kali Bit dan Byte 2-24
Aljabar Boolean Integer Ring Komutatif A B = B A A + B = B + A A & B = B & A A * B = B * A Asosiatif (A B) C = A (B C) (A + B) + C = A + (B + C) (A & B) & C = A & (B & C) (A * B) * C = A * (B * C) Distributif A & (B C) = (A & B) (A & C) A * (B + C) = A * B + B * C Identitas jumlahan dan perkalian A 0 = A A + 0 = A A & 1 = A A * 1 = A Nol adalah annihilator perkalian A & 0 = 0 A * 0 = 0 Negasi dari negasi ~ (~ A) = A ( A) = A Bit dan Byte 2-25
Aljabar Boolean Integer Ring Boolean: Distributif A (B & C) = (A B) & (A C) A + (B * C) (A + B) * (B + C) Boolean: Idempotency A A = A A + A A A True atau A True = A True A & A = A A * A A Boolean: Absorpsi A (A & B) = A A + (A * B) A A True atau A True dan B True = A True A & (A B) = A A * (A + B) A Boolean: hukum komplemen A ~A = 1 A + A 1 A True atau A False Ring: setiap elemen memiliki inversi penjumlahan A ~A 0 A + A = 0 Bit dan Byte 2-26
Boolean Ring {0,1}, ^, &, Ι, 0, 1 = Boolean Ring Identik dengan integer mod 2 = Z 2, + 2, * 2, 2, 0, 1 Ι adalah operasi identitas: Ι (A) = A Sifat-sifat Boolean Ring : Komutatif penjumlahan A ^ B = B ^ A Komutatif perkalian A & B = B & A Asosiatif penjumlahan (A ^ B) ^ C = A ^ (B ^ C) Asosiatif perkalian (A & B) & C = A & (B & C) Distributif A & (B ^ C) = (A & B) ^ (B & C) 0 identitas jumlah A ^ 0 = A 1 identitas kali A & 1 = A 0 annihilator kali A & 0 = 0 Inversi penjumlahan A ^ A = 0 Bit dan Byte 2-27
Relasi Antar Operasi Hukum DeMorgan Mengekspresikan & dalam bentuk, dan sebaliknya A & B = ~(~A ~B) A and B true jika and hanya jika A nor B false A B = ~(~A & ~B) A or B true jika dan hanya jika A and B keduanya tidak false Exclusive-OR menggunakan Inclusive OR A ^ B = (~A & B) (A & ~B) Hanya satu dari A and B true A ^ B = (A B) & ~(A & B) Salah satu A true, atau B true, tidak keduanya Bit dan Byte 2-28
Operasi Aljabar Boolean Operasi vektor bit Operasi bitwise (bit per bit) 011011 & 01010101 0101 011011 01010101 01111101 011011 ^ 01010101 1111 ~ 01010101 0101 01111101 1111 10101010 Seluruh sifat-sifat aljabar Boolean digunakan di sini Bit dan Byte 2-29
Representasi dan Operasi Set Representasi Set Lebar w pada bit vector merepresentasikan subset {0,, w 1} a j = 1 jika j I A = 011011 { 0, 3, 5, 6 } 76543210 B = 01010101 { 0, 2, 4, 6 } 76543210 Operasi Set A & B Irisan/Interseksi 0101 { 0, 6 } A B Union 01111101 { 0, 2, 3, 4, 5, 6 } A ^ B Berbeda simetrik 1111 { 2, 3, 4, 5 } ~ B Komplemen 10101010 { 1, 3, 5, 7 } Bit dan Byte 2-30
Operasi Bit dalam C Operasi &,, ~, ^ terdapat dalam bahasa C Dapat digunakan pada setiap tipe data integer long, int, short, char Setiap representasi bilangan dilihat sebagai bit vector Operasi bilangan dilakukan secara bit-wise Contoh (tipe data char) ~0x41 --> 0xBE ~0101 2 --> 10111110 2 ~0x --> 0xFF ~ 2 --> 11111111 2 0x69 & 0x55 --> 0x41 011011 2 & 01010101 2 --> 0101 2 0x69 0x55 --> 0x7D 011011 2 01010101 2 --> 01111101 2 Bit dan Byte 2-31
Operasi Logika dalam C OPERASI LOGIKA BERBEDA DENGAN OPERASI BIT Operator logika : &&,,! 0 dipandang sebagai FALSE Segala sesuatu yang tidak nol dipandang sebagai TRUE Selalu menghasilkan 0 atau 1 Terminasi awal Operasi a && 5/a tidak akan menyebabkan pembagian dengan nol Contoh (tipe data char)!0x41 --> 0x!0x --> 0x01!!0x41 --> 0x01 0x69 && 0x55 --> 0x01 0x69 0x55 --> 0x01 p && *p Bit dan Byte 2-32
Operasi Shift Shift kiri: x << y Shift argumen x ke kiri sebanyak y posisi Membuang bit paling kiri Bagian kanan diisi dengan 0 Shift kanan: x >> y Shift argumen x ke kanan sebanyak y posisi Membuang bit paling kanan Logical shift Bagian kiri diisi dengan 0 Arithmetic shift Replikasi MSB bagian kanan Digunakan pada representasi integer two s complement Argumen x << 3 Log. >> 2 Arit. >> 2 Argumen x << 3 Log. >> 2 Arit. >> 2 011010 01 0110 0110 101010 01 1010 111010 Bit dan Byte 2-33
Contoh Operasi XOR Bitwise XOR adalah bentuk penjumlahan Setiap nilai memiliki inversi jumlah (additive inverse) masing-masing A ^ A = 0 void funny(int *x, int *y) { *x = *x ^ *y; /* #1 */ *y = *x ^ *y; /* #2 */ *x = *x ^ *y; /* #3 */ } Begin 1 2 3 End *x A A^B A^B (A^B)^A = B B *y B B (A^B)^B = A A A Bit dan Byte 2-34
Ringkasan Semua berkisar tentang bit dan byte Bilangan Program Teks Mesin yang berbeda memiliki aturan berbeda Ukuran word Urutan byte Representasi Aljabar Boolean adalah operasi matematika Dasarnya mengkodekan FALSE = 0, TRUE = 1 Memiliki bentuk umum, digunakan pada operasi bit dalam C Baik digunakan untuk merepresentasikan dan memanipulasi set Bit dan Byte 2-35