Abstrak— tipe data merupakan data yang disimpan dalam mendefinisikan daftar variabel yang akan ditempatkan dalam
memory. Tipe data menetukan operasi yang dapat dilakukan pada blok memory menggunakan satu nama. Dengan demikian,
suatu data bertipe tertentu, rentang nilai yang mungki dimiliki setiap variabel berbeda pada structure dapat diakses
oleh data bertipe tertentu, arti dari data, dan cara menyimpan menggunakan sebuah single pointer atau dengan menggunakan
data tersebut dalam memory. Dalam Bahasa C mendukung
nama structure itu sendiri. Pada structure, masing-masing
pengolahan informasi dalam level bit menggunakan operator
bitwise. Berbeda dengan opertator level byte, operator bitwise variabel disimpan dalam blok memory yang kontigu yang
akan mengoperasikan data untuk setiap bit. Structure meruapakn biasanya memiliki delimiter berupa panjang word. Kita juga
complex data type yang mendefinisikan daftar variable yang akan dapat menggunakan sintaks sizeof untuk memeriksa ukuran
ditempatkan dalam blok memory menggunakan satu nama. structure yang definisikan.
Dengan demikian , setiap variable berbeda pada structure dapat Array merupakan kumpulan lokasi penyimpanan data yang
diakses menggunakan sebuah single pointer. Array merupakan kontigu (berurutan) dengan tipe data yang sama. Setiap lokasi
kumpulan lokasi penyimpanan data yang kontigu (berurutan) penyimpanan dalam sebuah array disebut elemen array. Array
dengan tipe data yang sama. Pointer merupakan variable; yng dialokasikan secara sekaligus dalam memory sesuai dengan
menyimpan alamat memory, dengan kata lain pointer memiliki
ukurannya. Karena letak elemen yang berurutan, akses elemen
nilai alamat memory untuk melaksanakan referensi terhadap
suatu objek yang tersimpan dalam memory computer. array pada memory relatif lebih mudah dan cepat dibandingkan
dengan struktur data Linked- List. Setiap elemen dalam array
Kata Kunci—level bit, memory, array, pointer, structure, bitwise, dapat diakses menggunakan indeks yang biasanya berupa
enkripsi, dekripsi,. bilangan bulat skalar bukan negatif.
Pointer merupakan variabel yang menyimpan alamat memory.
Dengan kata lain, pointer memiliki nilai alamat memory untuk
I. PENDAHULUAN melakukan referensi terhadap suatu objek yang tersimpan
dalam memory komputer. Dengan menggunakan pointer, kita
Tipe data merupakan representasi data yang disimpan dalam
dapat memiliki akses terhadap memory secara langsung. Untuk
memory. Tipe data menentukan operasi yang dapat dilakukan
setiap tipe data T, terdapat pointer ke T. Deklarasi pointer dalam
pada suatu data bertipe tertentu, rentang nilai yang mungkin
bahasa C dapat dilakukan dengan mudah, contohnya int *ptr
dimiliki oleh data bertipe tertentu, arti dari data, dan cara
yang merupakan pointer yang melakukan referensi terhadap
menyimpan data tersebut dalam memory. Terdapat beberapa
objek bertipe integer.
tipe data yang telah tersedia dalam bahasa C. Tipe data yang
tersedia ini disebut simple data type. Dengan adanya perbedaan
II. LANDASAN TEORETIS
ukuran masing-masing tipe data, diperlukan sebuah mekanisme
alignment pada memory agar setiap data tersusun dengan baik
di dalam memory dan dapat diproses oleh mikroprosesor. 2.1. POINTER
Dengan alignment, data-data variabel disimpan dalam lokasi Pointer merupakan variabel yang dapat memegang alamat dari
memory yang memiliki address offset yang berupa kelipatan suatu objek dalam memori. Pointer digunakan dalam program
dari ukuran word. Hal ini akan menambah performance karena untuk mengakses dan manipulasi data pada alamat tertentu.
data disusun sesuai cara mikroprosesor menggunakan memory. Dalam ANSI/C, array dan pointer memiliki keterkaitan yang
Bahasa C mendukung pengolahan informasi dalam level bit erat. Array dikenal sebagai pointer yang tetap (fixed pointer)
menggunakan operator bitwise. Berbeda dengan operator level sedangkan pointer sangat dinamis, artinya alamat yang
byte, operator bitwise akan mengoperasikan data untuk setiap dipegang oleh sebuah pointer dapat berubah-ubah. Jika dalam
bit. Sedangkan operator level byte, data akan diolah dalam materi fungsi dikenal mekanisme pengiriman suatu parameter
bentuk 1 byte (1 byte = 8 bit). Operator bitwise dapat digunakan via alamat atau (called-by reference), dalam ANSI/C,
pada berbagai tipe data seperti char, int, short, long, atau pengiriman parameter seperti itu dapat dilakukan menggunakan
unsigned. Structure (struct) merupakan complex data type yang pointer. Pointer adalah sebuah variabel dengan tipe tertentu
yang dapat digunakan untuk mencatat alamat dari suatu
variabel yang setipe dengannya, mengakses dan memanipulasi 2.2. TIPE DATA
data yang tersimpan dalam alamat tersebut. Jika int x adalah Tipe data merupakan representasi data yang disimpan dalam
sebuah variable bertipe integer maka &x berarti alamat dari x. memory. Tipe data menentukan operasi yang dapat dilakukan
Jika p adalah sebuah pointer bertipe integer maka p dapat pada suatu data bertipe tertentu, rentang nilai yang mungkin
menyimpan dan memegang alamat dari x tersebut. dimiliki oleh data bertipe tertentu, arti dari data, dan cara
Dalam ANSI/C, simbol asterisk * digunakan untuk menyimpan data tersebut dalam memory. Terdapat beberapa
mendeklarasi sebuah pointer. Bentuk umum pendeklarasian tipe data yang telah tersedia dalam bahasa C. Tipe data yang
pointer adalah: tipe_data *nama_pointer; tersedia ini disebut simple data type. C menggunakan 7
Sebagai contoh: int *p; keyword untuk menset tipe, yaitu :
Simbol asterik * memberitahu compiler bahwa sebuah pointer - integer : bilangan bulat (int, long, short, unsigned)
bertipe int dideklarasikan. Pendeklarasian seperti contoh di atas - huruf & karakter lain (char)
hanya memberitahukan compiler bahwa p adalah pointer - bilangan dg titik desimal (float, double)
bertipe int tanpa memberikan nilai awal apapun kepada p. Jika Tipe - tipe yang dihasilkan oleh keyword tersebut dibagi
sebuah pointer tidak diberi nilai awal secara eksplisit oleh menjadi 2 kelompok berdasarkan cara mereka disimpan
programmer, maka compiler secara otomatis memberi nilai komputer : 5 keyword pertama menghasilkan tipe integer
NULL sebagai nilai awal kepada pointer tersebut. Salah satu 2 keyword terakhir menghasilkan tipe floating-point.
cara menguji apakah sebuah pointer bernilai NULL adalah: 1. Integer , adalah bilangan bulat tanpa bagian fraksional
dan titik decimal integer disimpan sebagai bilangan
if(p == NULL) biner . Bilangan tanpa titik desimal dan eksponen
{ dikenali oleh kompilator sbg integer Contoh : 22 dan
Perhatikan pernyataan di bawah ini: -273 adalah konstan integer 22.0 bukan konstan
int i = 2; int *pi = &i; integer 22E3 bukan konstan integer.
Pernyataan di atas dapat divisualisasi sebagai berikut: 2. Short Dalam TURBO C variabel short dan variabel
integer tidak dibedakan
3. Long Variabel ini digunakkan untuk menaikkan
kapasitas dari variabel ybs
4. Tipe unsigned Variabel ini digunakan jika ingin
bekerja dengan data yang bernilai positif saja
Atau dengan kata lain, sebuah variabel i bertipe int dengan nilai Contoh : Unsigned int students; Unsigned players;
awal 2 dideklarasikan dan sebuah pointer pi bertipe int Unsigned short ribs = 6.
dideklarasikan dengan nilai awal dari pointer pi tersebut adalah 5. Tipe Char Mendefinisikan integer tak bertanda dalam
alamat dari variabel i. range 0 - 255 Disimpan dalam 1 byte Sebagian besar
Pernyataan: menggunakan kode ASCII Contoh : huruf A dalam
int *pi = &i; ASCII konversinya adalah 65 (desimal)
Berarti mendeklarasi sebuah pointer pi bertipe int dengan nilai Masing-masing tipe data memiliki ukuran yang berbeda-beda
awal berupa alamat dari i yang bertipe int. Simbol & pada untuk disimpan di dalam memory. Dalam bahasa C, kita dapat
pernyataan di atas merupakan operator unari yang bermakna menggunakan sintaks sizeof untuk mengetahui besar tipe data
alamat (address). Pointer juga dapat digunakan untuk tersebut di dalam memory. Contohnya, untuk mengetahui
menunjukkan structure berdasarkan alamatnya di memory. Hal ukuran tipe data integer, kita cukup menggunakan perintah
ini sangat berguna untuk melakukan passing structure ke atau sizeof(int) untuk mengetahui ukurannya. Kita juga dapat
dari sebuah fungsi hanya dengan memberikan alamat structure melihat rentang nilai yang direpresentasikan oleh masing-
tersebut di memory. Pointer ini juga dapat di-dereferensi seperti masing tipe data.
halnya pointer lain dalam bahasa C, yaitu menggunakan
operator dereference (*). Selain itu, juga terdapat operator yang
sangat berguna yaitu struct_name -> member untuk melakukan
dereferensi pointer-to-struct lalu mengakses nilai dari anggota
structure tersebut. Operator tersebut memiliki ekuivalensi
dengan (*struct_name).member. Sebetulnya, sebuah fungsi
dapat langsung mengembalikan sebuah structure walaupun hal
ini terkadang tidak efisien saat dijalankan. Dalam array, indeks
biasanya didefinisikan sebagai perhitungan matematika
terhadap alamat pointer. Dengan demikian penulisan array[i]
memiliki ekuivalensi dengan *(array + i). Perhitungan
matematika terhadap pointer untuk mengakses setiap elemen
array dapat dilakukan karena array memiliki elemen yang
tersusun secara kontigu (berurutan tanpa jeda).
Dengan adanya perbedaan ukuran masing-masing tipe data,
diperlukan sebuah mekanisme alignment pada memory agar
setiap data tersusun dengan baik di dalam memory dan dapat menghasilkan nilai salah. Berikut ini tabel yang menunjukkan
diproses oleh mikroprosesor. Dengan alignment, data-data hasil dari operasi XOR. Tabel kebenaran XOR
variabel disimpan dalam lokasi memory yang memiliki address
offset yang berupa kelipatan dari ukuran word. Hal ini akan
menambah performance karena data disusun sesuai cara
mikroprosesor menggunakan memory.
Setelah header file dibuat maka, body harus juga dibuat agar dapat dikompilasi. Berikut adalah kode program dari body of header file. Pada program dibawah ini
diguakan operator NOT dan AND. Pada output nantinya computer akan mengeksekusi hasil yaitu NOT x AND y.
Code program XOR_function.c
#include <stdio.h>
Berikut adalah kode program utama dari XOR. Dimana angka yang diigunakan adalah 4 XOR 5. Setelah angka diubah menjadi bilangan biner maka setiap bit akan
dieksekusi. Operator bitwise digunakan untuk menyelesaikan operasi-operasi bilangan dalam bentuk biner yang dilakukan bit demi bit. Dengan kata lain, operator
bitwise ini berfungsi untuk melakukan pemanipulasian bit. Operasi ini merupakan hal vital apabila program yang kita buat kan melakukan interaksi dengan perangkat
keras (hardware). Meskipun bahasa pemrograman lebih bersifat data-oriented, namun perangkat keras masihlah bersifat bit-oriented. Ini artinya, perangkat keras
menginginkan input dan output data yang dilakukan terhadapnya tetap dalam bentuk bit tersendiri.
Dari tabel kebenaran diatas jika kita bandingkan dengankode yang ada pada body, maka hasilnya akan bernilai 1.
Code program main_XOR_function.c
#include<stdio.h>
#include "XOR_function.h"
#include "XOR_function.c"
#include <stdio.h>
#include "getByte.h"
Kode program diatas merupakan body dari header file. Pada kode program digunakan switch case
switch (n){
case 0: return ((unsigned) (x & 0x000000FF)) >> 0;
case 1: return ((unsigned) (x & 0x0000FF00)) >> 8;
case 2: return ((unsigned) (x & 0x000FF0000)) >> 16;
case 3: return ((unsigned) (x & 0xFF000000)) >> 24;
karena bit tidak hanya dalam satu tipe namun dan juga berbeda ukuran byte maka dilakukan case dengan byte 0, 8, 16, dan 24 byte. Setiap case akan dieksekusi
computer sesuai nilai bit yang kita input. Berikut adalah main code dari ekstraksi byte
Kode program main_getByte.c
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :main_getByte.c
//deskripsi :fungsi ekstraksi Byte
#include <stdio.h>
#include "getByte.h"
#include "getByte.c"
Dari output diatas dapat kita lihat jika kita menginput data 0x12345678 pada data ke 1 maka didapat hasil ekstraksi byte nya adalah 0x56 .
0x000000FF
0x0000FF00
0x000FF0000
0xFF000000
Berdasarkan fungsi diatas maka ekstraksi byte berhasul dilkukan dengan menggunakan shift artinya byte digeser kekiri sesuai tipe yang diatas. Maka ekstraksi file
berhasil dilakukan oleh computer.
Kode program diatas merupakan kode header file dari masiking byte dimana menggunakan fungsi yang bertipe integer.
int bitMask (int highbit, int lowbit);
berikut adalah kode body dari header file.
Kode program bitmask.c
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :bitMask.c
//deskripsi :fungsi masking Byte
#include <stdio.h>
#include "bitMask.h"
#include <stdio.h>
#include "bitMask.h"
#include "bitMask.c"
Pada output dapat kita lihat, batas atas yang diinput adalah 5 dan batas bawah adalah 3 hasil yang diperoleh 0x38. 0x38 merupakan hasil masking dari kode
program
masking = (1 << 31 ) >> range;
return masking >> (31-highbit);
dari fungsi tersebut proses masking dapat kita peroleh yaitu dengan shift ke kiri sebanyak 31 dan shift kekanan sebanyak jumlah batas nya . batas yang
dinput adalah 5 dan 3 maka diperoleh 0x38.
d. Tugas 4: Fungsi Membalik Urutan
Pada kode program ini diperintahkan untuk membuat fungsi membalik urutan, seprti urutan byte. Jika user menginput 0x321 maka output nya adalah 0x123. Artinya
byte dibalik urutannya. fungsi yang dapat membalik urutan byte dari suatu data X dengan menukar byte ke-0 dengan byte ke-3 dan byte ke-2 dengan byte ke-1.
Urutan byte pada data berurutan dari byte ke-0 pada LSB dan byte ke-3 pada MSB. Berikut adalah kode program header filenya.
Kode program reverseByte.h
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :reverseByte.h
//deskripsi :fungsi memabalik urutan Byte
#include <stdio.h>
#include "reverseByte.h"
Dari kode program diatas dapat kita lihat fungsi yang digunakan
for (i=0; i<=3; i++){
result += ((x >> 8 * i) & 0xFF) << 8 * (3-i);
berdasrakan fungsi tersebut maka byte yang kita input dapat dibalik urutannya
Kode program main_reverseByte.c
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :bitMask.c
//deskripsi :fungsi memabalik urutan Byte
#include <stdio.h>
#include "reverseByte.h"
#include "reverseByte.c"
Mengapa diperoleh hasil eksekusi demikian? Cara kerjanya adalah sebagai berikut:
Sesuai kode program yang kita buat, dilakukan pemisahan Byte dengan operator yang kita gunakan yaitu operator AND. Operator AND kan melakukan
penukaran posisi dengan byte 0xFF sesuai kode. Kita menginput byte 0x01020304 maka operator akan melakukan penukaran posisi. Angka 4 yang
sebelumnya diakhir setelah direverse posis berubah didepan diikuti dengan angka 0, namun sehingga urutan menjadi 40302010, maka reverse berhasil
dilakukan.
e. Tugas 5: Fungsi Pengurangan Byte
Pada program ini dilakukan pengurangan byte. fungsi yang dapat menghitung hasil pengurangan antara byte data pertama dikurangi byte data kedua. Sistem bilangan
negatif yang digunakan adalah sistem two’s complement. Operator pengurangan (-) tidak boleh digunakan dalam merealisasikan fungsi pengurangan byte ini. Namun
Hanya operator penjumlahan (+) dan invers (~) saja yang dapat digunakan untuk merealisasikan fungsi. Maka berikut adalah kode program dengan mengguanakan
header file. Fungsi yang digunakan adalah int minBytes (int x, int y);
Kode program minBytes.h
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :minBytes.h
//deskripsi :fungsi penguragan Byte
#include <stdio.h>
#include "minBytes.h"
#include <stdio.h>
#include "minBytes.h"
#include "minBytes.c"
Dengan main kode diats maka output yang diperoleh adalah sebagai berikut
Output program
Pada output user menginput nilai bilangan pertama 0x15 dan bilangan kedua 0x07. Kedua bilanagn byte dikurangkan dan memperoleh hasil 0x0e. mengapa
bisa terjadi demikian? Karena digunakan algoritma pengurangan yang terdapat pada body. Karena dideklarasikan
y = ~y+1;
x= x + y;
x + x&0x000000FF;
dimana y merupakan bilangan kedua, y dinotasikan dalam operator not. Artinya komputer akan mengubah nyte menjadi note dan kemudian dijumlahkan
dengan byte y. kemudian x dideklarasikan dengan x tambah y yang artinya byte x dijumlah dengan byte y yang dinotasikan sebelumnya. Operator yang
dilakukan adalah AND dan hasil penguarangan 0xFF.
#include <stdio.h>
#include "shifRegister.h"
#include <stdio.h>
#include "shifRegister.h"
#include "shifRegister.c"
pada output diperolah global var 1 sama dengan 0x00000004 dan global Var 2sama dengan 0x00000093. Mengapa diperoleh demikian? Pada fungsi shift
register dilakukan pergeseran bit kearah kanan.
printf ("Global var 1 :0x%.8x\n", shifRegister(0x04));
printf ("Global var 2 :0x%.8x\n", shifRegister(0x13));
return 0;
dari kutipan kode tersebut dapat kita lihat bahwa dilakukan operasi shift. Diberi input 0x13 dan 0x04. Byte tersebut digeser kekanan sebanyak 6 kali dengan
menambah 0 dibelakang 04 demikian juga pada 0x13 digeser kekanan dan ditambah bit 0. Sehingga diperoleh seperti pada gambar output diatas.
#include <stdio.h>
#include <string.h>
int main ()
{
char teks[100];
int i, length;
printf("Masukkan satu kata :");
gets (teks);
length=strlen(teks);
printf("karakter yang sudah dibalik: ");
for (i=length-1;i>=0;i--){
printf ("%c", teks[i]);
}
printf("\npanjang kata = %d", length);
return 0;
}
Dengan kode program yang ditas maka output yang diperoleh adalah sebagai berikut
Output kode program
pada output komputer meminta inputan dengan masukkan kata. Contoh, user memasukkan kata sella maka kata tersebut dibalik menjadi alles. Komputer juga
dapat menghitung jumlah kata yang diinput. Mengapa terjadi demikian? Karena kode yang digunakan
gets (teks);
length=strlen(teks);
printf("karakter yang sudah dibalik: ");
for (i=length-1;i>=0;i--){
printf ("%c", teks[i]);
kode tersebut memerintahkan untuk menghitung jumlah kata dan membalikkan urutan kata tersebut. Kita menggunakan looping dan juga array dengan looping
I, untuk i panjang dikurang satu, I lebih besar atau sama dengan nol dan I minus, maka setiap kata yang diinptu dibalik urutan sehingga diperoleh alles.
#include <stdio.h>
int main()
{
int jlh_mhs, n;
char nama[100][100];
printf(“Jumlah mahasiswa :”);
scanf(“%d”, &n);
Pada outpur dapat kita lihat bahwa nama yang diinput akan berbentuk matrisk. Megapa hal tersebut terjadi? Karena kode yang digunakan adalah
#define MAX 10
#define SIZE 31
#include <stdio.h>
int main ()
{
char *nama[MAX], input [MAX][SIZE];
int x, y, a;
#ifndef START_VAL
#define START_VAL 0
#endif
Kode program sum_biner.c
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :sum_biner.c
//deskripsi :penjumlahan biner dengan array
#include <stdio.h>
#include <math.h>
#include “sum_biner.h”
return value;
}
Kode program main_sum_biner.c
//praktikum 14S3103 Arsitektur Sistem Komputer
//Modul :2
//Percobaaan :pointer, structure, array, dan operasi dalam level bit
//tanggal :09 oktober 2020
//Nama (NIM) : Sella Simangunsong (14S18005)
//Nama file :main_sum_biner.c
//deskripsi :penjumlahan biner dengan array
#include <stdio.h>
#include <math.h>
#include “sum_biner.h”
#include “sum_biner.c”
int main (void)
{
int x, y, i;
int temp, plus, min;
int C[8], D[8], E[8], result[8];
int carry=0;
}
for (i-0; i<8; i++){
result[i]= fungsiXOR (fungsiXOR(C[i], D[i]), carry);
carry =((C[i]&carry)|(D[i]&carry))|(C[i]&D[i]);
}
printf(“Hasil penjumlahan biner :”);
E[i]=getbit (y,i);
}
}
printf (“\nHasil pengurangan biner :”);
for (i=0; i<8; i++){
printf(“%d”, result[i]);
}
min =bitdes(result);
printf(“\nHasil 25ecimal : %d”, min);
return 0;
}
Dengan kode program diatas maka output yang diperoleh adalah sebagai berikut:
Output kode program
return value;
dengan kode program diatas komputer dapat mengetahui perintah dan apa yang aka dilakukan yaitu melakukan penjumlahan bilangan biner.
for (i=0; i<8; i++){
C[i] =getbit (x,i);
D[i]=getbit (y,i);
Dengan looping computer dapat memahami bagaimana biner akan dijumlahkan sesuai permintaan user
for (i-0; i<8; i++){
result[i]= fungsiXOR (fungsiXOR(C[i], D[i]), carry);
carry =((C[i]&carry)|(D[i]&carry))|(C[i]&D[i]);
fungsi XOR yang digunakan adalah untuk dapat menjumlahkan bilangan bit
printf(“Hasil penjumlahan biner :”);
E[i]=getbit (y,i);
return 0;
setelah seluruh proses selesai, misalnya user meminta data 2 maka setelaha proses kedua aka di tampilkan hasilnya pada layar. Dam memperoleh penjumalahan
bilangan biner.
Analaisis pertanyaan :
1. Bagaimana representasi tipe data float dan double dalam memory?
Jawab: Bilangan floating-point dapat merepresentasikan nilai yang rangenya jauh lebih besar daripada integer, Untuk operasi aritmetika, bil. floating-point bisa
kehilangan presisinya, Operasi terhadap bilangan floating-point lebih lambat daripada terhadap integer dan double tipe data floating point ukuran 64 bit
2. Bagaimana cara melakukan penulisan structure agar memory yang digunakan lebih efisien?
Jawab: Perlu diingat bahwa bahasa C tidak mengizinkan kita melakukan deklarasi rekursif terhadap structure (sebuah structure tidak boleh berisi structure bertipe
yang sama dengan structure tersebut). Kita dapat menggunakan pointer untuk melakukannya agar memory lebih efisien
7. Apa saja operasi-operasi yang dapat dilakukan pada operasi level bit dalam bahasa C?
Jawab: Bahasa C mendukung pengolahan informasi dalam level bit menggunakan operator bitwise. Berbeda dengan operator level byte, operator bitwise akan
mengoperasikan data untuk setiap bit. Sedangkan operator level byte, data akan diolah dalam bentuk 1 byte (1 byte = 8 bit). Operator bitwise dapat digunakan pada
berbagai tipe data seperti char, int, short, long, atau unsigned
9. Apa saja yang dapat dilakukan oleh pointer? Mengapa penggunaan pointer dapat berbahaya apabila tidak digunakan sesuai alokasi alamatnya?
Jawab: Pointer dapat digunakan untuk menunjukkan structure berdasarkan alamatnya di memory. Hal ini sangat berguna untuk melakukan passing structure ke atau
dari sebuah fungsi hanya dengan memberikan alamat structure tersebut di memory. pointer memiliki nilai alamat memory untuk melakukan referensi terhadap suatu
objek yang tersimpan dalam memory komputer. Dengan menggunakan pointer, kita dapat memiliki akses terhadap memory secara langsung. Untuk setiap tipe data
T, terdapat pointer ke T.
10. Apa perbedaan pointer to char, pointer to integer, pointer to double dari segi bahasa assembly?
Jawab: pointer to char menunjuk kode C yang bertipe char, pointer to integer menunjuk kode C yang bertipe integer, pointer to double menunjuk kode C tipe double.
11. Apa perbedaan pointer to char, pointer to integer, pointer to double dari segi perhitungan address?
Jawab: dari segi address perbedaan yang dapat dilihat adalah bentuk pemanggilan alamat, pada pointer cara digunakan &c, pada pointer int digunakan &d, pada
double menunjuk alamat tipe double saja dan nilai pun akan berbeda.
12. Apa perbedaan implementasi array of pointer to array of character dengan array of character of character?
Jawab: Array juga dapat memiliki elemen array berupa array. Dengan demikian, kita dapat mendefinisikan array n-dimensi. Contohnya, sebuah matriks merupakan
array dengan dua dimensi. Array tersebut memiliki elemen array berupa array, contohnya int pusheen[][5] atau int pusheen[4][5]. Namun, karena memory komputer
bersifat linear, komputer akan menyimpan array n-dimensi dalam bentuk linear juga. Hal ini menyebabkan kita harus memperhatikan urutan indeks untuk mengakses
setiap elemen array n-dimensi karena hal ini akan berpengaruh terhadap performance dari program yang kita buat terlebih data array yang diolah cukup besar,
contohnya seberapa baikkah program yang kita buat dalam memanfaatkan cache memory (cache-friendly). Pointer
menggunakan sintaks sizeof untuk memeriksa ukuran
structure yang kita definisikan.
IV. SIMPULAN
Dari percobaan yang telah saya lakukan saya dapat
menyimpulkan bahwa: V. REFERENSI
1. Informasi level bit disimpan dalam memory dengan 1. Aho, A.V., Ravi, S., & Ullman, J.D. (2007).
representasi sesuai tipe datanya. Dengan adanya Compiler: Principle, techniques and tools. @nd.
perbedaan ukuran masing-masing tipe data, Addison-Wesley. New York
diperlukan sebuah mekanisme alignment pada 2. Bryant, Randal, dan David O’Hallaron. Computer
memory agar setiap data tersusun dengan baik di Systems : A Programmer’s Perspective 2nd Edition.
dalam memory dan dapat diproses oleh mikroprosesor. 2011. Massachusetts : Pearson Education Inc.
Dengan alignment, data-data variabel disimpan dalam 3. Patterson, David, dan John Hennessy. Computer
lokasi memory yang memiliki address offset yang Organization and Design : The Hardware/Software
berupa kelipatan dari ukuran word. Hal ini akan Interface. 2012. Waltham : Elsevier Inc.
menambah performance karena data disusun sesuai 4. Modul paraktikum arsitektur computer.
cara mikroprosesor menggunakan memory.
2. Bahasa C mendukung pengolahan informasi dalam
level bit menggunakan operator bitwise. Berbeda
dengan operator level byte, operator bitwise akan
mengoperasikan data untuk setiap bit. Sedangkan
operator level byte, data akan diolah dalam bentuk 1
byte (1 byte = 8 bit). Operator bitwise dapat digunakan
pada berbagai tipe data seperti char, int, short, long,
atau unsigned. Bahasa C juga memiliki operator logika
AND, inclusive OR, dan NOT. Operator ini sering
tertukar dengan operator bitwise.
3. Pointer juga dapat digunakan untuk menunjukkan
structure berdasarkan alamatnya di memory. Hal ini
sangat berguna untuk melakukan passing structure ke
atau dari sebuah fungsi hanya dengan memberikan
alamat structure tersebut di memory. Pointer ini juga
dapat di-dereferensi seperti halnya pointer lain dalam
bahasa C, yaitu menggunakan operator dereference
(*). Selain itu, juga terdapat operator yang sangat
berguna yaitu struct_name -> member untuk
melakukan dereferensi pointer-to-struct lalu
mengakses nilai dari anggota structure tersebut.
Operator tersebut memiliki ekuivalensi dengan
(*struct_name).member.
4. Array merupakan kumpulan lokasi penyimpanan data
yang kontigu (berurutan) dengan tipe data yang sama.
Setiap lokasi penyimpanan dalam sebuah array disebut
elemen array. Array dialokasikan secara sekaligus
dalam memory sesuai dengan ukurannya. Karena letak
elemen yang berurutan, akses elemen array pada
memory relatif lebih mudah dan cepat dibandingkan
dengan struktur data Linked- List. Setiap elemen
dalam array dapat diakses menggunakan indeks yang
biasanya berupa bilangan bulat skalar bukan negatif.
5. Structure (struct) merupakan complex data type yang
mendefinisikan daftar variabel yang akan ditempatkan
dalam blok memory menggunakan satu nama. Dengan
demikian, setiap variabel berbeda pada structure dapat
diakses menggunakan sebuah single pointer atau
dengan menggunakan nama structure itu sendiri. Pada
structure, masing-masing variabel disimpan dalam
blok memory yang kontigu yang biasanya memiliki
delimiter berupa panjang word. Kita juga dapat
Lampiran
Output dari kode program tugas 1