REPRESENTASI DAN MANIPULASI LEVEL BIT, POINTER DAN ARRAY
REPRESENTASI DAN MANIPULASI LEVEL BIT, POINTER DAN ARRAY
Bahasa pemrograman C mendukung operasi Boolean level bit. Simbol yang biasa digunakan untuk melakukan operasi Boolean pada C adalah : | untuk OR, & untuk AND, ~ untuk NOT, dan ^ untuk EXCLUSIVE‐OR.
Operasi‐operasi ini dapat dilakukan pada berbagai tipe data, seperti char, int, short, long atau unsigned. Pada operasi logika, C juga mendukung dengan simbol : || untuk operasi logika OR, && untuk operasi logika AND, dan ! untuk operasi logika NOT.
Operasi ini mudah tertukar dengan operasi Boolean level bit, tetapi sebenarnya kedua operasi ini sangat berbeda. Pada operasi logika, setiap argumen yang bukan nol merepresentasikan TRUE, sementara argumen nol (0) merepresentasikan FALSE. Fungsi logika mengembalikan nilai 1 dan 0, yang mengindikasikan TRUE dan FALSE. Selain operasi Boolean dan operasi logika, terdapat juga operasi shift. C dapat melakukan operasi shift pada level bit ke kiri dan ke kanan.
Pada umumnya, seluruh mesin dapat mendukung dua bentuk operasi right shift : logical dan arithmetic. Logical right shift mengisi sisi paling kiri dengan bit 0, sementara arithmetic right shift mengisi sisi paling kiri dengan bit tanda yang direpresentasikan pada MSB.
- PERCOBAAN
Pada percobaan ini anda diminta untuk membuat 10 buah fungsi yang berhubungan dengan representasi dan manipulasi informasi pada level bit. Setiap fungsi harus dilengkapi dengan fungsi main dan dikompilasi hingga diperoleh file eksekusi‐nya. Penilaian dilakukan berdasarkan kebenaran dari program serta efisiensi penggunaan kode.
Persiapan lingkungan kerja :
Pindah ke direktori kerja anda. Simpan seluruh program anda pada direktori tersebut.
• Fungsi 1 : bitXor(x,y)
Buat fungsi yang memiliki perilaku serupa dengan operasi ^. Operator yang boleh digunakan hanya & dan ~.
Contoh : bitXor(4,5) = 1 Prototype fungsi : int bitXor(intx, int y).
• Fungsi 2 : oddBits(void)
Fungsi evenBits memberikan nilai return satu word, dimana seluruh bit ganjil diset menjadi 1.
Setiap bit pada satu word diberi nomor dari 0 (LSB) hingga 31 (MSB). Prototype fungsi : int oddBits(void).
• Fungsi 3 : getByte(x,n)
Fungsi getByte mengekstrak byte n dari word data x. Urutan byte dalam word diberi nomor dari 0 (LSB) hingga 3 (MSB).
Contoh : getByte(0x12345678,1) = 0x56 Prototype fungsi : int getByte(int x, int n).
• Fungsi 4 : bitMask(highbit,lowbit)
Fungsi bitMask menghasilkan suatu mask dimana seluruh bit antara highbit dan lowbit diset menjadi 1, dan bit sisanya diset menjadi 0. Asumsi 0 <= lowbit <= 31 dan 0 <= highbit <= 31. Jika lowbit > highbit, mask seluruhnya 0.
Contoh : bitMask(5,3) = 0x38 Prototype fungsi : int bitMask(int highbit, int lowbit).
• Fungsi 5 : reverseBytes(x)
Fungsi reverseBytes membalikkan urutan byte dari input word dengan menukar byte 0 dengan byte 3, byte 1 dengan byte 2. Urutan byte pada word berurutan dari 0 (LSB) hingga 3 (MSB).
Contoh : reverseBytes(0x01020304) = 0x04030201 Prototype fungsi : int reverseBytes(int x).
• Fungsi 6 : tmax(void)
Fungsi tmax mengembalikan nilai two’s complement integer terbesar. Prototype fungsi : int tmax(void).
• Fungsi 7 : minBytes(x)
Fungsi minBytes menghitung nilai dari byte data pertama dikurangi byte data kedua. Sistem bilangan negaif yang digunakan adalah two’s complement. Tidak boleh menggunakan operator pengurangan (‐), hanya boleh menggunakan penambahan (+) dan invers (~).
Contoh : minBytes(0x15,0x07) = 0x0E Prototype fungsi : int minBytes(int x, int y).
• Fungsi 8 : shiftRegister(x)
Fungsi untuk memasukkan data berdasarkan fungsi shift register pada sistem digital. Asunsi jumlah bit adalah 32 bit, dan setiap nilai yang dimasukkan adalah 5 bit. Nilai awal register adalah 0x00000000.
Contoh : shiftRegister(0x04)= 0x00000004 (dlm biner 0x...0000000100) shiftRegister(0x13)= 0x00000093 (dlm biner 0x...0010010011) ket : input sebelumnya berpengaruh pada nilai sekarang. Prototype fungsi : int shiftRegister (int x).
- ARRAY
Array adalah kumpulan lokasi penyimpanan data, setiap data menyimpan tipe data yang sama. Setiap lokasi penyimpanan disebut elemen array Anda tahu bahwa semua bahasa pemrograman tingkat tinggi menggunakan variabel. Sedangkan pada bahasa pemrograman tingkat rendah variabel didefinisikan dengan cara yang lebih rumit. Di sinilah salah satu kelebihan C ditunjukkan, dimana ia dapat menjembatani antara bahasa kelas tinggi (unggul dengan kemudahan karena konsepnya manusiawi) dengan bahasa tingkat rendah (powerfull, karena akses maksimal terhadap hardware). Dalam C, programmer memiliki akses terhadap memory secara langsung dengan menggunakan pointer. Untuk memahami konsep pointer, anda perlu mempelajari konsep pengalamatan memory. Definisi pointer adalah variabel yang menyimpan alamat memory.
Komentar
Posting Komentar