STRUKTUR DATA DAN KOMPUTASI LUNAK BITARRAY CLASS by: Bagus Prabandaru (2210106070) Yanu Perwira Adi Putra (2210106039) MOTIVATING PROBLEM - Menentukan Bilangan Prima Menggunakan Metode Filter Eratosthenes metode yang menyisihkan bilangan dari kelipatan bilangan sebelumnya sampai yang tersisa adalah bilangan prima. - Penyelesaian Masalah penyelesaian dengan menggunakan array dan selanjutnya akan diselesaikan menggunakan BitArray CONTOH Metode Filter Eratosthenes menentukan bilangan prima dari 100 bilangan integer dengan menggunakan array Dimulai dengan bilangan 2 yang merupakan bilangan prima pertama, lalu menyisihkan semua bilangan yang merupakan kelipatan dari bilangan 2. Kemudian pindah dengan bilangan 3, lalu disisihkan semua bilangan yang merupakan kelipatan dari bilangan 3. Selanjutnya pindah dengan bilangan 5 dan bilangan yang lain, dengan melakukan hal yang sama seperti sebelumnya. Setelah selesai mengidentifikasi semua bilangan, bilangan yang tersisa adalah bilangan prima. CONTOH Metode Filter Eratosthenes menentukan bilangan prima dari 100 bilangan integer dengan menggunakan BitArray Menginisialisasi sebuah array dari 100 elemen dengan setiap elemen di-set ke nilai 1. Dimulai dengan indeks 2, masing-masing indeks array diperiksa untuk melihat nilai 1 atau 0, jika nilai 1, maka diperiksa apakah kelipatan dari 2, jika ia maka indeks di set 0. Selanjutnya ke indeks 3 dan ke indeks yang lain dengan menggunakan cara yang sama. Setelah selesai mengidentifikasi semua elemen, elemen yang tersisa adalah bilangan prima. Manipulasi Bits dan Bit Sistem Bilangan Biner Memanipulasi Bilangan Biner Menggunakan Operator Bitwise dan Bit-Shift Sistem Bilangan Biner Bilangan biner adalah string dari 0s dan 1s yang mewakili basis 10(desimal) angka dalam basis 2. ex. 00000000-0d (dimana d menandakan angka desimal) 00000001-1d 00000010-2d 00000011-3d 00000100-4d 00000101-5d 00000110-6d Konversi biner ke desimal ex. nilai biner 00101010 penyelesaian 0 + 21 + 0 + 2 3 + 0 + 2 5 + 0 + 0 = 0 + 2 + 0 + 8 + 0 + 32 + 0 + 0 = 42 Memanipulasi Bilangan Biner Menggunakan Operator Bitwise dan Bit-Shift (1) Operator Bitwise : AND, OR, NOT Operator ini adalah operator logika, digunakan untuk menggabungkan ekspresi yang berhubungan dalam rangka untuk menghitung nilai tunggal Boolean. Ketika digunakan dalam angka biner, true setara dengan 1 dan false setara dengan 0. Ex : 00000001 and 00000000 -> 00000000 00000001 and 00000001 -> 00000001 00000010 and 00000001 -> 00000000 00000000 or 00000001 -> 00000001 00000001 or 00000000 -> 00000001 00000010 or 00000001 -> 00000011 00000000 Xor 00000001 -> 00000001 00000001 Xor 00000000 -> 00000001 00000001 Xor 00000001 -> 00000000 Memanipulasi Bilangan Biner Menggunakan Operator Bitwise dan Bit-Shift (2) operator bit-shift : <<, >> dan >>> Operator yang digunakan untuk mengubah posisi bit dalam bilangan biner. Masing-masing operator mengambil dua operator: nilai (kiri) dan jumlah bit untuk menggeser (kanan). ex : 1 << 1 --> 00000010 2 >> 1 --> 00000001 bilangan biner 3 --> 00000011 3 << 1 --> 00000110 3 << 2 --> 00001100 3 >> 1 --> 00000001 Aplikasi Konversi Integer-biner Kata kunci untuk mengkonversi sebuah integer menjadi bilangan biner adalah mask. fungsi mask adalah menyembunyikan beberapa bit dalam angka, sementara menampilakan yang lain. ketika mask dan integer digabungkan dengan operator AND, hasilnya adalah string biner yang mewakili integer. int dispMask = 1 << 31; StringBuilder bitBuffer = new StringBuilder(35); for(int i = 1; i <= 32; i++) { if ((val && bitMask) == 0) bitBuffer.Append("0"); else bitBuffer.Append("1"); val <<= 1; if ((i % 8) == 0) bitBuffer.Append(" ");} Aplikasi Bitwise Aplikasi ini membahas bagaimana bit melakukan fungsi operator Bitwise int val1, val2; val1 = Int32.Parse(txtInt1.Text); val2 = Int32.Parse(txtInt2.Text); lblInt1Bits.Text = ConvertBits(val1).ToString(); lblInt2Bits.Text = ConvertBits(val2).ToString(); lblBitResult.Text = ConvertBits(val1 && val2).ToString(); int val1, val2; val1 = Int32.Parse(txtInt1.Text); val2 = Int32.Parse(txtInt2.Text); lblInt1Bits.Text = ConvertBits(val1).ToString(); lblInt2Bits.Text = ConvertBits(val2).ToString(); lblBitResult.Text = ConvertBits(val1 || val2).ToString(); Aplikasi Bit-Shift Aplikasi ini membahas bagaimana bit melakukan fungsi operator Bit-Shift int value = Int32.Parse(txtInt1.Text); lblOrigBits.Text = ConvertBits(value).ToString(); value <<= Int32.Parse(txtBitShift.Text); lblInt1Bits.Text = ConvertBits(value).ToString(); int value = Int32.Parse(txtInt1.Text); lblOrigBits.Text = ConvertBits(value).ToString(); value >>= Int32.Parse(txtBitShift.Text); lblInt1Bits.Text = ConvertBits(value).ToString(); BitArray Class BitArray sangat mirip dengan ArrayList. BitArray bekerja dengan bit sehingga dapat diubah ukurannya secara dinamis seperti menambah bit ketika diperlukan tanpa khawatir melampaui batas atas array. Menggunakan BitArray Class (1) BitArray Class dibuat menggunakan instruksi : BitArray BitSet = new BitArray(32); 32 bit BitArray di atas diset False, jika ingin mengubah True digunakan : BitArray BitSet = new BitArray(32, True); Dapat juga digunakan pada byte, seperti di bawah ini : byte[] ByteSet = new byte[] {1, 2, 3, 4, 5}; BitArray BitSet = new BitArray(ByteSet); Menggunakan BitArray Class (2) Bit yang disimpan dalam BitArray dimulai dari kiri, hal ini dapat membingungkan untuk dibaca karena secara umum dari kanan. Contoh BitArray 8-bit dengan nomor 1 : true false false false false false false false (10000000) dimana secara umum adalah : false false false false false false false true (00000001) byte[] ByteSet = new byte[] {1, 2, 3, 4, 5}; BitArray BitSet = new BitArray(ByteSet); for (int bits = 0; bits <= bitSet.Count-1; bits++) Console.Write(BitSet.Get(bits) + " "); Menggunakan BitArray Class (3) class chapter6 { static void Main() { int bits; string[] binNumber = new string[8]; int binary; byte[] ByteSet = new byte[] {1,2,3,4,5}; BitArray BitSet = new BitArray(ByteSet); bits = 0; binary = 7; for(int i = 0; i <= BitSet.Count-1; i++) { if (BitSet.Get(i) == true) binNumber[binary] = "1"; else binNumber[binary] = "0"; bits++; binary--; if ((bits % 8) == 0) { binary = 7; bits = 0; for(int i = 0; i <= 7; i++) Console.Write(binNumber[i]); } } } } Untuk menampilkan dalam bentuk biner dan dengan menggunakan urutan secara umum digunakan instruksi BitSet dan binNumber. Menggunakan BitArray Class (3) Menggunakan BitArray Class (4) BitArray.Set (bit, value) dimana bit BitArray adalah indeks bit yang ditetapkan Metode Class yang lain : dan value adalah nilai boolean yang ditetapkan pada bit. BitSet.SetAll (False) mengatur semua nilai bit dengan melewati nilainya sebagai argumen. bitSet1.Or (bitSet2) dikikuti dengan : bitSet.Clone() BitArray digunakan pada metode Bitwise, misal untuk Bitwise Or memiliki dua BitArray (bitSet1 dan bitSet2) seperti di atas. bitSet.CopyTo(arrBits) arrBits untuk menyalin isi BitArray ke array standar Menggunakan BitArray pada Filter Eratosthenes Aplikasi Filter Eratosthenes untuk menentukan bilangan prima dari 1 sampai 1024 dengan metode BitArray. Menggunakan BitArray pada Filter Eratosthenes Filter Eratosthenes diterapkan pada loop : int lastBit = Int32.Parse(Math.Sqrt(bits.Count)); for(int i = 2; i <= lastBit-1; i++) if (bits.Get(i)) for (int j = 2 ∗ i; j <= bits.Count-1; j++) bits.Set(j, 0); Loop tersebut bekerja melalui kelipatan semua bilangan hingga akar kuadrat dari bilangan-bilangan di dalam BitArray, lalu menghilangkan semua kelipatan dari bilangan 2, 3, 4, 5, dan seterusnya. Kesimpulan BitArray Class digunakan untuk menyimpan kumpulan bit yang terdiri dari True (1) dan False (0). Permasalahan yang dapat diselesaikan dengan susunan angka bisa lebih efisien dan cepat diselesaikan dengan menggunakan BitArray. SELESAI TERIMAKASIH ATAS PERHATIAANNYA