Anda di halaman 1dari 25

Pointer, Structure, Array, dan Operasi dalam Level Bit

Tanggal Percobaan: 29/09/2017


[Prak.Arsitektur Sistem Komputer] [NWS3103]
[Labortorium Sistem Digital] – Teknik Elektro

Structure atau biasa disingkat struct merupakan suatu


Abstrak— Pada praktikum yang berjudul struktur data yang menggabungkan beberapa data
“Pointer,Structure,Array , dan Operasi dalam Level Bit ini , dengantipe data lain yang memiliki ukuran yang berbeda.
kita akan banyak menggunakan bahasa C dan tipe udian dikelompokan dalam satu deklarasi yang unik dan
penyimpanan lainnya, sama sepertri praktikan sebelumnya.
saling
Adapun tujuan dilakukan praktikan ialah diharapkan peserta
praktikum dapat mengubah innformasi menjadi subuah data
berkaitan. Struct secara logic membuat suatu tipe data baru
dalam level bit yang tersimpan dalam memory, dapat
menggunkan operator yang digunakan saat pegolahan kedalam
(user defined) yang dapat dihubungkan dan

memory. Disamping kita dapat memahami cara penyimpanan pengapilkasiananya pada meorry yaitu proses pemberian
data tersebut kita juga akan menggunakan fungsi dalam bahasa alamat untuk masing masing array oleh pointrnya.
C , yaitu array dan diharapkan dapat memahami cara kerjanya
sepertti pointer, array , fungsi dan structure dalam
proses penyimpanan didalam memory. Alat dan aplikasi yang
aka kita gunakan pada praktikan ini adalah sebuah laptop,
LANDASAN TEORETIS
aplikasi notepad ++, dan MinGw.

Tipe Data
Key words—Pointer, Structre, Array, Memory, Function.
Dalam pemrograman bahasa C dikenal beberapa tipe data
antara lain Bit, Char, Int, Long Int dan Float. Tipe data ini
I. PENDAHULUAN
biasanya terkait dengan sebuah konstanta atau variabel yang
Bahasa C adalah salah satu bahasa pemograman yang tealah
berguna pada proses pemrograman. masing-masing tipe data
umum digunakan. Pada praktikan sebelumnya telah kita
tersebut mempunyai ukuran dan jangkauan yang berbeda-
ketahui bahwa bahasa C jug digunakan oleh intel sebagai
beda seperti tipe data Char memiliki ukuran 8 bit dengan
algoritma peyipanan datanya. Pada C terdapat beberapa
jangkauan 256 sedangkan tipe data Int memiliki ukuran 16
fungsi yang digunakan sebagai algoritma dimemory yaitu
bit dengan jangkauan 65536.
pointer,array, strucuter yang tersimpan dalam bentuk bit.
Khusus untuk tipe data Char, Int dan Long Int dikenal
Pointer (variable penunjuk) adalah suatu variable yang
istilah Signed dan Unsigned atau dalam bahasa Indonesia
berisi alamat memori dari suatu variable lain. Pad a pointer
berarti bertanda dan tak bertanda. Yang dimaksud dengan
terdapat 2 buah operator yang digunakan, yaitu & (address
bertanda disini adalah penggunaan tanda minus (-). Tipe data
of/operator alamat) dan * (value pointed by).
yang termasuk “Signed” boleh disebut dengan tipe datanya
Array adalah rentetan data yang memiliki tipe data sama.
saja, misalnya tipe data Signed Char bisa ditulis dengan
Array dan pointer memiliki hubungan yaitu pada setiap
array memiliki alamat yang dipegang oleh sebuah pointer.
Tipe Data Ukuran Rentang Nilai
Char 1 Byte -128 – 127
Unsigned 1 Byte 0 – 255
Chart
Signed 1 Byte -128 – 127
Chart
Short 2 Byte -32768 – 32768

Unsigned 2 Byte 0 – 65535


Short
Signed 2 Byte -32768 – 32768
Short
Int 4 Byte -2147483648 –
2147483647
Unsigned 4 Byte 0 – 4294967295
Int
Signed Int 4 Byte -2147483648 –
2147483647
Long 4 Byte -2147483648 –
2147483647
Unsign 4 Byte 0 – 4294967295
Long
Gambar 1 Hasil Kompilasi untuk mengetahui
Signed 4 Byte -2147483648 –
ukuran tipe data
Long 2147483647
Long 8 Byte -9223372036854775808
Long –
Perbedaan tersebut mengakibatkan diperlukannya
9223372036854775807
alignment pada memory agar setiap data tersusun dengan
Unsigned 8 Byte 0 --
baik di dalam memory dan dapat diakases mikroprosesor.
Long 18446744073709551615
Dengan alignment, data variabel yang telah tersimpan
Long
berada di memory yang memiliki address offset yang berupa
Signed 8 Long
Byte -9223372036854775808
kelipatan dari ukuran word. Hal tersebut akan sangat
Long –
mendukung karena sesuai dengan cara penyimpanan
9223372036854775807
mikroprocessor.
Float 4 Byte 1.17549435e-38 -
3.40282347e+38,
B.Operator Bitwise dalam Bahasa C
Double 8 Byte 1.7976931348623157e
Bahasa C mendukung pengolahan informasi dalam level
+ 308 - bit menggunakan operator bitwise. Berbeda dengan operator
2.2250738585072014e- level byte, operator bitwise akan mengoperasikan data untuk
308. setiap bit. Sedangkan operator level byte, data akan diolah
Char saja. Sedangkan untuk tipe “Unsigned” harus ditulis dalam bentuk 1 byte (1 byte = 8 bit). Operator bitwise dapat
secara lengkap misalnya Unsigned Char.
digunakan pada berbagai tipe data seperti char, int, short, Gambar II. B. 2. Skema Right Logical Shift [3]
long, atau unsigned.

Operator-operator bitwisedalam bahasa C didefinisikan


sebagai berikut.

Gambar II. B. 3. Skema Left Arithmetic Shift [3]

Khusus untuk operator Right Shift, terdapat dua


jenis operator Right Shift, yaitu Logical Right Shift
dan Arithmetic Right Shift. Logical Right Shift akan
mengisi bit MSB dengan nilai 0 sementara
Gambar II. B. 4. Skema Right Arithmetic Shift [3]
Arithmetic Right Shift akan mengisi bit MSB sesuai
dengan tanda (sign) variabel tersebut menurut aturan
C. Structure
two’s complement. Untuk Left Shift, tidak ada
Structure (struct) merupakan complex data type yang
perbedaan antara Logical Left Shift dan Arithmetic
mendefinisikan daftar variabel yang akan ditempatkan dalam
Left Shift. Pada umumnya, seluruh mesin dapat
blok memory menggunakan satu nama. Dengan demikian,
mendukung dua jenis operator Right Shift dan Left
setiap variabel berbeda pada structuredapat diakses
Shift ini.
menggunakan sebuah single pointer atau dengan
menggunakan nama structureitu sendiri. Pada structure,
masing-masing variabel disimpan dalam blok memory yang
kontigu yang biasanya memiliki delimiter berupa panjang
word. Kita juga dapat menggunakan sintaks sizeof untuk
memeriksa ukuran structureyang kita definisikan. Perlu
diingat bahwa bahasa C tidak mengizinkan kita melakukan
deklarasi rekursif terhadap structure (sebuah structure tidak
Gambar II. B. 1. Skema Left Logical Shift [3] boleh berisi structure bertipe yang sama dengan structure
tersebut). Kita dapat menggunakan pointer untuk
melakukannya. Beberapa mesin juga membutuhkan
alignment data pada memory secara spesifik sehingga ukuran
structure dapat berbeda karena compiler secara otomatis
melakukan alignment data-data pada structure, contohnya
dengan padding.
Untuk mengatur alignment data, perlu dimasukkan dapat dideklarasikan dengan contoh int pusheen []. Dengan
beberapa bytes (yang sebenarnya tidak digunakan) di antara demikian pusheen merupakan array yang memiliki elemen
akhir dari data structure terakhir dan awal dari data structure bertipe integer namun dengan banyak elemen yang belum
selanjutnya. Hal ini yang disebut dengan data structure didefinisikan. Untuk melakukan alokasi terhadap array
padding. [2] pusheen, kita dapat menggunakan perintah malloc atau
Berikut dijelaskan bagaimana cara menghitung jumlah calloc dalam bahasa C. Untuk mengubah ukuran array
bytes dari padding : dinamis yang telah dialokasikan, kita dapat menggunakan
padding = (align – (offset mod align)) mod align perintah realloc. Untuk melakukan dealokasi array dinamis,
kita dapat menggunakan perintah free. Perhatikan bahwa
new offset = offset + padding = offset + (align – (offset pada beberapa kasus, perintah realloc dapat menyebabkan
mod align)) mod align program tidak efisien contohnya saat array diubah
ukurannya menjadi lebih besar dan sistem harus melakukan
pemindahan elemen-elemen array ke posisi memory yang

D.Array baru agar perbesaran ukuran array dapat dilakukan.

Array merupakan kumpulan lokasi penyimpanan data yang Array juga dapat memiliki elemen array berupa array.

kontigu (berurutan) dengan tipe data yang sama. Setiap Dengan

lokasi penyimpanan dalam sebuah array disebut elemen demikian, kita dapat mendefinisikan array n-dimensi.

array. Array dialokasikan secara sekaligus dalam Contohnya, sebuah matriks merupakan array dengan dua

memorysesuai dengan ukurannya. Karena letak elemen yang dimensi. Array akan dideklarasikan sehingga akan
berurutan, akses elemen arraypada memory relatif lebih dialokasikan sejumlah tempat di memori
mudah dan cepat dibandingkan dengan struktur data Linked- komputer sebanyak m x n byte yang letaknya
List. Setiap elemen dalam array dapat diakses menggunakan
selalu berdekatan. Contohnya, sebuah matriks
indeks yang biasanya berupa bilangan bulat skalar bukan
negatif. Dalam bahasa C, elemen pertama dalam array diberi
merupakan array dengan dua dimensi.
indeks 0. Representasi array dalam memory dengan Arraytersebut memiliki elemen arrayberupa
deklarasi int nim [8] adalah sebagai berikut (asumsikan array, contohnya int pusheen[][5]atau int
address elemen ke-0 adalah 0x4000 dengan nilai elemen A[2][2].Namun, karena memory komputer
pertama adalah 1, nilai elemen kedua adalah 3, nilai elemen
bersifat linear, komputer akan menyimpan
ketiga adalah 2, nilai elemen keempat adalah 1, nilai elemen
kelima adalah 1, nilai elemen keenam adalah 0, nilai elemen
arrayn-dimensi dalam bentuk linear. Hal ini
ketujuh adalah 0, dan nilai elemen kedelapan adalah 7). menyebabkan harus memerhatikan urutan indeks
untuk mengakses setiap elemen arrayn-
dimensi,dikarenakan hal ini akan berpengaruh
terhadap performancedari program yang dibuat,
terlebih data array yang diolah cukup besar,
Bahasa C mendukung deklarasi array secara statis maupun seperti seberapa baikkah program yang kita buat
secara dinamis. Array statis memiliki ukuran yang tidak bisa dalam memanfaatkan cache memory (cache-
diubah-ubah sedangkan array dinamis memiliki ukuran yang
friendly).
dapat ditentukan saat program sedang berjalan.Arraydinamis
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. Sebetulnya,
sebuah fungsi dapat langsung mengembalikan sebuah

Gambar di atas menunjukkan bagaimana penyimpanan structure walaupun hal ini terkadang tidak efisien saat

variabel matriks 1 dimensi pada memory. 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)

Gambar di atas menunjukkan bagaimana penyimpanan


variabel matriks 2 dimensi pada memory.

E. Pointer
Pointer merupakan variabel yang menyimpan alamat
memory. Dengan kata lain, 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. Deklarasi pointer dalam bahasa C dapat
dilakukan dengan mudah, contohnya int* ptr yang
III.HASILDANANALISIS
merupakan pointer yang melakukan referensi terhadap objek
bertipe integer.
A.Tugas 1: Membuat Fungsi bitwise XOR dengan bitwise
Pointer juga dapat digunakan untuk menunjukkan structure
NOT & AND
berdasarkan alamatnya di memory. Hal ini sangat berguna
Operator XOR merupakan salah satu operasi bitwise.
untuk melakukan passing structure ke atau dari sebuah
Penulisannya dalam bahasa C yaitu ‘ ^’ . XOR adalah
fungsi hanya dengan memberikan alamat structure tersebut
singkatan dari Exclusive OR atau dapat disebut juga sebagai
gerbang “setiap tetapi tidak semua” . Gerbang XOR akan 1 1 1 0
muncul apabila muncul satan ganjil pada mausukan. 1 0 0 1
X Y X^Y 0 1 0 1
Tabel disamping
0 0 0 1 1 1 0
adalah tabel kebenaran
0 1 1 gerbang XOR. Pada
1 0 1 tugas ini kita akan Fungsi tersebut kemudian di buat ke dalam bahasa C dan

menghasilkan gerbang dilakukan kompilasi. \


1 1 0
XOR dengan
menggunakan bitwise AND dan complement. Adapaun
hasil yang diperoleh ialah:
X XOR Y = ~((~(x&~y))&(~(~x&y)))
Tabel 2. Tabel kebenaran yang dihasilkan.
X Y X^Y ~X ~Y (X&~Y) (~X&Y)
0 0 0 1 1 0 0
Gambar 2 Hasil Kompilasi
0 1 1 1 0 0 1
1 0 1 0 1 1 0
1 1 0 0 0 0 0

~(X&~ ~(~X& ((~(x&~y))&(~(~x ~((~(x&~y))&(~(~x


Y) Y) &y))) &y)))

Pada gambar diatas diperoleh dua hasil yaitu satu dan


bukan satu. Hasil satu akan diperoleh apabila inputan
pertama lebih kecil dari yang kedua.
Apabila inputan data bilangan pertama lebih besar dari
kedua. Dan output akan menghasilkan satu apabila
sebaliknya.
5(Basis 10)  0101
Hasil di atas memiliki inputan nilai 2 bilangan (pada ontoh Operasi XOR  00011 (Basis 10)
4 dan 5) dan menghasilkan hasil operasi =1.
4(Basis 10)  0100

B.Tugas 2: Membuat suatu fungsi untuk mengekstrak tersebut. Proses ekstraksi ini membutuhkan urutan/besar
Byte. byte ekstraksi (Dalam kode program adalah nilai ‘n’) yaitu
pada Low Significant Bit bernilai 0 hinggi 2 untuk nilai
Fungsi ekstraksi Byte adalah funsi yang menerima Most Significant Bitnya.
beberapa bit data dan dapat melakukan ekstraksi dari data
Fungsi untuk proses ekstraksi Byte return ((unsigned) (x &
0x00FF0000)) >> 16;
case 3 :
return ((unsigned) (x &
0xFF000000)) >> 24;
}
}

Dari data berbentuk penyimpanan C yang menjelaskan .


Output dari proses ekstraksi tergantung pada nilai x dan n
(berupa unsigned int) yang merupakan hasil dari operasi
Pada memory diatas dapat kita peroleh output yaitu 34 itu, bitwise AND antara x dengan 0x000000FF(case 0),
data yang diperoleh tersebut sesuai dengan lokasi ekstrasi 0x0000FF00 (case 1),dan 0x00FF0000
yang berada pada data ke 2 pada 0X12345678. (case 2).

//Praktikum NWS3103 Arsitektur Sistem Komputer Proses pengolahannya:


//Modul :2 Int x=12345678 Biner=0001 0010 0011 0100 0101 0110 0111
//Percobaan :0 1000

//Tanggal : 13 Oktober 2018 00FF0000(n=2)Biner=0000 0000 1111 11111 0000 0000 0000
0000
//Kelompok :
//Rombongan : 02
AND (&) Biner= 0000 0000 0011 0100 0000 0000 0000
//Nama (NIM) 1 : Albert A Simarmata (14S16014)
0000
//Nama File : getByte.c
// Deskripsi : fungsi yang dapat melakukan ekstraksi
return((unsigned)(x &0x00FF0000))>>16;
data yang memperhatikan nilai MSB nya.

berarti hasilnya digeser ke kanan


#include<stdio.h> (shift right) sebanyak 3 byte (nilai n)
#include "getByte.h" atau 16 bit ‘0000 0000 0011 0100 0000 0000 0000
int getByte (int x, int n) 0000’menjadi ‘0000 0000 0000 0000 0000 0000 0011 0100’
{ selanjutnya hasil diubah kebentuk heksa
switch (n) = 0x12.
{ case 0 : Urutan byte pada data X diberi nomor 0 untuk LSB hingga
return ((unsigned) (x & 3 untuk MSB. Misalnya, jika sebuah data X berisi
0x000000FF)) >> 0; (0x12345678) dan user ingin mengekstraksi data pasa
case 1 : urutan byte 2. Maka hasi ekstraksi nya adalah 34.
return ((unsigned) (x &
0x0000FF00)) >> 8; C. Tugas 3 membuat fungsi masking byte
case 2 :
di alamat paling depan dan MSB nya berada paling
belakang.

Analisis : dengan menggunakan array kita dapat


melakukkan swaping sehingga data yang diperoleh dapat
disimpan dan melakukan chahange position atara masing -
masig array.

Pada praktikum ini kita akan memprogram suatu mask


dengan aturan seluruh bit diantara batas atas (highbit) dan E.Tugas 5: Fungsi Pengurangan Byte

batas bawah (lowbit) sehingga menghasilkan 1 sedangkan


bit diluar batas atas (highbit) dan batas bawah (lowbit) di
set menjadi 0. Asumsi yang digunakan adalah 0 ≤ batas

Dari pernyataan teebut sifat shift left (logic) dihubungkan


dengan nilai binary nya nilai 1 sebanyak 31 kali.
Pada tugas 5 ini kita aka memberikan masukkan sebuah
Selanjutnya dilakukan shift right (aritmatic) disesuaiakan
bilangan hex. Dimana inputan terjadi dua kali yaitu untuk
dengan batas nilai rangenya (highbit-lowbit). Selanjtnya
hex pertama dan hex kedua.
diterapkan dilakukan shift right (logic) sebanyak 31-
range.
Pada praktikum in juga kita disuruh untuk membuat
sebuah fungsi yang dapat menghitung hasil pengurangan
Analisis : Setelah di compile berhasil di layer cmd kita
byte pertama yang dikurangi dengan byte data kedua.
diminta untuk memasukkan inputan berupa dua buah
Adapun cara penulisan bilangan negatif yang digunakan
bilangan yakni batas atas dan batas bawah dan akan
adalah sistem two’s complement atau signed . Operator
memperoleh hasil masking bit.
pengurangan (-) tidak dapat digunakan ,hanya operator
penjumlahan (+) dan invers (~) saja yang dapat digunakan
untuk merealisasikan fungsi ini.

Analisis:
D. Tugas 4 :Fungsi Membalik Urutan Byte Pengoperasian penjumlahan maupun pengurangan pada
bilang hex yang memiliki sifat hex haruslah menggunakan
komplemen dalam setian pengiputannya.

Tugas 6 : Fungsi shift register


Pada praktika ini kita akan memasukkan urutan memory
sebanyak 8 bit sesuia kapasitas dari memry . Selanjutnya
urutan memory terebut akanditukan sehingga LSB berada
Pada percobaan ini kita akan menggunkaan notepad ++
Sesuaikan informasi yang tertera pada header. Simpan
program ini dengan nama coba.c pada folder kerja yang
sesuai. Lalu compile hingga meliki tipe penyimpanan .s
dan selajutnya kita buka dengan apalikaso hex edit. Dapat
kita perhatikan angka yang akan menunjukan alamat
Pada tugas ini kita akan memberikan iputan terhadap
sebelum disimpan pada memory komputer.
sebuah alamat sebuah memory. Saat kita hanya memberi
inputan 3 buah bilangan hex maka bagian MSB akan
Analisis : dalam menggunakan bahasa asssembly maka
bertambah 5 buah bilangan 0.
kita dapa mengetahui proses pemberian almaat oleh
pointer.
Analisis : Pada penyimpaanan dibutuhkan kapasitas 1 byte
, dengan adanya register apabila kita hanya masih
memberi inputan 3 buah integer maka komputer akan
menambahakan lima buah nol secara otomatis, dan begitu
seterusnya untuk kasus lain.

Tugas 7: Program Enkripsi Sederhana


Pada program enkripsi (encrypt) sederhana yang berfungsi
untuk menyamarkan 9 digit yang telah menjadi inputan
menggunakan keyboard oleh pengguna. Enkripsi denagn
XOR untuk setiap 8 bit dari 32 bit input dengan sebuah
angka desimal 8 bit.

Analisis :
Dengan menggunakan encrypt maka uruatan bilangan Tugas 9 : Fungsi membalik Urutan Array
integer maupun hexa dapat kita ubah sesuai dengan batas
encrpyt, sehingga orang lain yang ingin menembus
keamanan kita dapat dicegah.

Tugas 8 : Tugas 8 : Pointer dan Assembly


Tugas ini adalah percobaan untuk lebih memahami
pemanggilan prosedur dan stack pada memory.
Analisis :
Pada pemberian input kita hanya akan memasukkan char
danp pointer akan memberikan penamaan setiap masing –
masing char yang dimasukkan.

Pada praktikum ini kita disuruh untuk membuat sebuah Tugas 11 : Matriks nama dengan pointer
program menerima beberapa karakter yang diberikan oleh
pengguna, menyimpan berupa tipe data char tersebut pada
sebuah array of character, dean menampilkan dengan
posisi terbalik .

Contoh hasil eksekusi adalah sebagai berikut. Kita akan


memberikan inputan char sehingga membentuk 123.
Pada praktikum ini mirip dengan Tugas 10 namun terdapat
Kemudian program akan menampilkannya di layar dengan
modifikasi pada struktur data. Pada tugas ini, realisasi
susunan 321 dari penjelasan diatas terjadi penukan array
array of array of character diganti dengan array of pointer
oleh pointer sehingga pointer paling besar menjadi yang
to array of character. Program ini kemudian juga dapat
terkecil.
menampilkan isi dari array of pointer to array of character
Dan apabila kita mengimput char sama maka akan menjadi
pada layar sesuai dengan urutan yang benar. Nantinya kita
amas.
akan memberikan inputan terhadap char minimal 10 dan
apabila dilakukan eneter maka masing masing char akan
Tugas 10 : Matriks Nama
memberikan inpformasi pointer yang ada pada masing –
masing mereka. Sehingga kita dapat mengetahui berapa
indeks arry yang ada pada asing – masing arra./

12. Perkalian matriks

Pada praktikum ini kita akan membuat sebuah program


yang berupa character sehingga dapat membentuk nama
seseorang . Karena tipe data berupa character maka harus
dapat merealisasikan array of array of character. Program
ini kemudian juga dapat menampilkan isi dari array of
array of character pada layar sesuai dengan urutan yang
benar.
Pada praktikum ini kita disuruh untuk membuat fungsi
yang dapat melakukan perkalian dua buah matriks.
Keluaran dari fungsi ini merupakan matriks hasil perkalian 2. Berdasarkan percobaan yang telah dilakukan,
tersebut. Dalam pembuatan matriks kita kethui bahwa untuk mengolah data dalam level bit pada
matriks yagn dapat dikalikan adalah matriks yang memilik memory dapat mengggunakan operator bitwise
model yang sama yaitu baris dan kolom yang sama. 3. Dengan menggunakan pointer dalam pengolah
data, dapat membantu mengoptimalisasi
Untuk melakunkan perkalian kita akan megguankan loop penggunaan memory saat code di eksekusi
karean kita aka memasukkan integer yang dimasukkan ke 4. Array merupakan salah satu tipe data yang dapat
masing masing arrynya . dijadikan sebagai penampung data lain, Fungsi
Fungsi dari loop ialah pointer array yang tersimpan akan array dapat dibagi dua yaitu array statis dan array
secara otoamatis sehingga tidak perlu dilakukkan dinamis. Dimana array statis memiliki ukuran
penomoran manual. yang tidak dapat diubah-ubah sedangkan array
dinamik memiliki ukuran yang dapat ditentukan
13. Penjumlahan Biner dengan array saat program sedang berjalan.

5. DAFTAR PUSTAKA
• Bryant, Randal, dan David O’Hallaron. Computer
Pada praktikum ini kita disuruh untuk membuat sebuah Systems : A Programmer’s Perspective 2nd Edition. 2011.
program yang dapat melakukan simulasi operasi Massachusetts : Pearson Education Inc.
penjumlahan dan pengurangan pada level bit dengan • Patterson, David, dan John Hennessy. Computer
representasi two’s complement menggunakan array. Array Organization and Design : The Hardware/Software
yang digunakan terdiri atas 8 bit saja dan hanya boleh diisi Interface. 2012. Waltham: Elsevier Inc.
oleh angka 1 atau 0. Buatlah makefile untuk melakukan • http://gentongkosong.blogspot.co.id/2011/12/violitta -
kompilasi program ini. Bila diperlukan, Anda dapat yesmaya-skom-lecturer-17-posts.html, 14 Oktober 2015,
menggunakan fungsi pada printbitbyte.c. Analisis : Dari 10:18
hasil compile diatas kita bisa melihat

KESIMPULAN
1. Array adalah suatu urutan memory yang tesusun
dan dapat diisi ileh tipe data yang berbeda
LAMPIRAN //Tanggal : 11 Oktober 2018
Tugas 1 //Kelompok :
//Praktikum NWS3103 Arsitektur Sistem Komputer //Rombongan : 02
//Modul :2 //Nama (NIM) 1 : Albert A Simarmata (14S16014)
//Percobaan :0 //Nama File : fungsiXOR.c
// Deskripsi : sebuah fungsi yang sama dengan XOR
menggunakan AND dan Komplemen
// librray
#include<stdio.h>
int fungsiXor (int x, int y); #include<stdio.h>
int fungsiXor (int x, int y) #include "fungsiXOR.h"
{
// code
// algoritma int main (void) {
int result; //Deklarasi variabel
result = ~((~(~x&y))&(~(x&~y))); // fungsi AND int a,b ;
dan komplement. printf("Masukan bilangan integer
return result; pertama : ");
} scanf("%d",&a);
printf("Masukan bilangan integer kedua
//Praktikum NWS3103 Arsitektur Sistem Komputer : ");
//Modul :2 scanf("%d",&b);
//Percobaan :0 printf("Hasil operasi XOR :
//Tanggal : 13 Oktober 2018 %d",fungsiXor(a,b));
//Kelompok : return 0;
//Rombongan : 02 }
//Nama (NIM) 1 : Albert A Simarmata (14S16014)
//Nama File : fungsiXOR.c Tugas 2
// Deskripsi : Header untuk fungsi Xor //Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
#ifndef FUNGSIXOR //Percobaan :0
#define FUNGSIXOR //Tanggal : 13 Oktober 2018
int fungsiXor (int x, int y); //Kelompok :
#endif //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata (14S16014)
//Praktikum NWS3103 Arsitektur Sistem Komputer //Nama File : getByte.c
//Modul :2 // Deskripsi : Fungsi yang dapat melakukan ekstraksi
//Percobaan :0 byte ke-n dari suatu data X yang memiliki ukuran
//Tanggal : 13 Oktober 2018 tertentu. urutan byte pada data X diberi nomor 0 untuk
//Kelompok : LSB hingga 3 untuk MSB.
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata (14S16014) #include<stdio.h>
//Nama File : main.c #include "getByte.h"
// Deskripsi : fungsi main Xor int getByte (int x, int n)
{ //Nama (NIM) 1 : Albert A Simarmata(14S16014)
switch (n) //Nama File : getByte.h
{ case 0 : // Deskripsi : main program (main.c)
return ((unsigned) (x &
0x000000FF)) >> 0; #include <stdio.h> #include "getByte.h"
case 1 : int main(void)
return ((unsigned) (x & {
0x0000FF00)) >> 8; int x,result,n;
case 2 : printf("Masukan data yang akan di
return ((unsigned) (x & ekstraksi : 0x");
0x00FF0000)) >> 16; scanf ("%x",&x);
case 3 : printf("Ekstraksi dilakukan pada data
return ((unsigned) (x & ke-: ");
0xFF000000)) >> 24; scanf("%d",&n);
} printf("Hasil ekstraksi data : 0x%x",
} getByte(x,n));
return 0;
//Praktikum NWS3103 Arsitektur Sistem Komputer }
//Modul :2
//Percobaan :0
//Tanggal : 11 Oktober 2018 Tugas 3
//Kelompok : //Praktikum NWS3103 Arsitektur Sistem Komputer
//Rombongan : 02 //Modul :2
//Nama (NIM) 1 : Albert A Simarmata(14S16014) //Percobaan :0
//Nama File : getByte.h //Tanggal : 11 Oktober 2018
// Deskripsi : header sebagai penghubung fungsi //Kelompok :
(getByte.c) dengan main program (main.c) //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
#ifndef GETBYTE //Nama File : bitMask.c
#define GETBYTE // Deskripsi : fungsi yang menghasilkan suatu mask
int getByte(int x,int n); dengan aturan seluruh bit diantara batas atas
#endif // (highbit) dan
batas bawah (lowbit) diset menjadi 1 sedangkan bit
//Praktikum NWS3103 Arsitektur Sistem Komputer diluar highbit dan lowbit diset menjadi 0.
//Modul :2 // Asumsi yang
//Percobaan :0 digunakan adalah 0<= batas bawah <=31 dan 0<=
//Tanggal : 11 Oktober 2018 batas atas <= 31.
//Kelompok :
//Rombongan : 02 #include <stdio.h> #include "bitMask.h"
int bitMask (int highbit, int lowbit) //Nama (NIM) 1 : Albert A Simarmata (14S16014)
{ // Deskripsi : main program untuk masking bit
int range = highbit-lowbit;
//Banyak bit yang akan di mask sesuai #include <stdio.h>
dengan range+1(maks adalah 32) #include "bitMask.h"
unsigned masking; int main(void)
if (range<1) {
return 0; // masking dilakukan int x,y;
untuk seluruh bit printf("Masukan batas atas bit yang
else { akan dimasking : ");
masking = (1<<31)>>range; scanf ("%d",&x);
//dilakukan pengeseran suatu bilangan dengan bit ke printf("Masukan batas bawah bit yang
31-(31-range) bernilai 1 akan dimasking : ");
return masking>>(31-highbit); scanf("%d",&y);
} printf("Hasil masking bit : 0x%x",
} bitMask(x,y));
return 0;
//Praktikum NWS3103 Arsitektur Sistem Komputer }
//Modul :2
//Percobaan :0 Tugas 4
//Tanggal : 11 Oktober 2018 //Praktikum NWS3103 Arsitektur Sistem Komputer
//Kelompok : //Modul :2
//Rombongan : 02 //Percobaan :0
//Nama (NIM) 1 : Albert A Simarmata(14S16014) //Tanggal : 11 Oktober 2018
// Nama File : bitMask.h //Kelompok :
// Deskripsi : header sebagai penghubung fungsi //Rombongan : 02
(bitMask.c) dengan main program (main.c) //Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Nama File : main.c
#ifndef BITMASK // Deskripsi : main program untuk melakukan reverse
#define BITMASK bytes
int bitMask(int highbit,int lowbit); #include <stdio.h>
#endif #include "reverseByte.h"
int main(void)
//Praktikum NWS3103 Arsitektur Sistem Komputer {
//Modul :2 int x;
//Percobaan :0 printf("Masukan data yang akan di
//Tanggal : 11 Oktober 2018 reverse urutannya : 0x");
//Kelompok : scanf ("%x",&x);
//Rombongan : 02 printf("Hasil reverse urutan byte :
0x%x", reverseBytes(x)); Byte2 = Byte2 >> 8;
return 0; //Byte2 ini menjadi byte ke-1 atau di
} shift kanan sebanyak 2 byte
Byte1 = Byte1 << 8;
//Byte1 ini menjadi byte ke-2 atau di
//Praktikum NWS3103 Arsitektur Sistem Komputer shift kiri sebanyak 2 byte
//Modul :2 Byte0 = Byte0 << 24; //Byte0 ini
//Percobaan :0 menjadi byte ke-3 atau di shift kiri sebanyak 6 byte
//Tanggal : 11 Oktober 2018 return (Byte0 + Byte1 + Byte2 +
//Kelompok : Byte3);
//Rombongan : 02 }
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Deskripsi : 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 //Praktikum NWS3103 Arsitektur Sistem Komputer
ke-3 pada MSB. //Modul :2
//Percobaan :0
#include <stdio.h> //Tanggal : 11 Oktober 2018
#include "reverseByte.h" //Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
int reverseBytes(int x) // Nama File : reverseBytes.h
{ // Deskripsi : header sebagai penghubung fungsi
unsigned Byte3 = (x & 0xFF000000); (reverseBytes.c) dengan main program (main.c)
//byte ke-3 dari x tetap, byte lainnya #ifndef REVERSEBYTE
diset 0 #define REVERSEBYTE
unsigned Byte2 = (x & 0x00FF0000); int reverseBytes(int x);
//byte ke-2 dari x tetap, byte lainnya #endif
diset 0
unsigned Byte1 = (x & 0x0000FF00);
//byte ke-1 dari x tetap, byte lainnya Tugas 5
diset 0
unsigned Byte0 = (x & 0x000000FF); //Praktikum NWS3103 Arsitektur Sistem Komputer
//byte ke-0 dari x tetap, byte lainnya //Modul :2
diset 0 //Percobaan :0
Byte3 = Byte3 >> 24; //Tanggal : 11 Oktober 2018
//Byte3 ini menjadi byte ke-0 atau di //Kelompok :
shift kanan sebanyak 6 byte //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014) {
// Nama File : minBytes.c //x = (x<<24)>>24;
// Deskripsi : main program untuk melakukan //y = (y<<24)>>24;
pengurangan byte y = ~y+1;
#include <stdio.h> // untuk mengubah y menjadi -y
#include "minBytes.h" x = x+y; // melakukan
int main(void) pengurangan,x = x-ykarena y = -y
{ x = x&0x000000FF;
// Deklarasi variabel return x;
int x,y;//Meminta masukan input dari user }
printf("Masukan bilangan pertama (hex max 2
angka) : 0x");
scanf("%x",&x);
printf("Masukan bilangan kedua (hex max 2
angka) : 0x");
scanf ("%x",&y);//Menampilkan hasil //Praktikum NWS3103 Arsitektur Sistem Komputer
printf("Hasil pengurangan : 0x0%x", //Modul :2
minBytes(x,y)); //Percobaan :0
//Tanggal : 11 Oktober 2018
} //Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
//Nama (NIM) 2 : Tuggul Pasaribu (14S15020)
// Nama File : minBytes.h
//Praktikum NWS3103 Arsitektur Sistem Komputer // Deskripsi : header sebagai penghubung fungsi
//Modul :2 (minBytes.c) dengan main program (main.c)
//Percobaan :0 #ifndef MINBYTES
//Tanggal : 11 Oktober 2018 #define MINBYTES
//Kelompok : int minBytes(int x, int y);
//Rombongan : 02 #endif
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Nama File : minBytes.c
// Deskripsi : fungsi yang dapat menghitung hasil Tugas 6
pengurangan antara byte data pertama dikurangi //Praktikum NWS3103 Arsitektur Sistem Komputer
dengan byte data kedua. //Modul :2
//Percobaan :0
#include <stdio.h> //Tanggal : 11 Oktober 2018
#include "minBytes.h" //Kelompok :
int minBytes(int x, int y) //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014) setiap nilai dimasukan ke dalam shift register secara
//Nama (NIM) 2 : Tuggul Pasaribu (14S15020) bergantian adalah 5 bit
// Nama File : main.c #include<stdio.h>
// Deskripsi : main program untuk fungsi shift register #include "shiftRegister.h"
#include <stdio.h> int global_var = 0;
#include "shiftRegister.h" int shiftRegister (int x)
int main (void) {
{ global_var = (global_var << 8) | x;
// Deklarasi variabel return global_var;
int x,n=0;//Meminta masukan input dari }
user
while(n<=4){
printf("Masukan input : 0x"); //Praktikum NWS3103 Arsitektur Sistem Komputer
scanf("%x",&x); //Menampilkan //Modul :2
hasil shift register //Percobaan :0
printf("Hasil shift register yaitu : //Tanggal : 11 Oktober 2018
0x%.8x", shiftRegister(x)); //Kelompok :
printf("\n"); //Rombongan : 02
n++; //Nama (NIM) 1 : Albert A Simarmata(14S16014)
} // Nama File : minBytes.h
return 0; // Deskripsi : header sebagai penghubung fungsi
} (shiftRegister.c) dengan main program (main.c)
#ifndef SHIFTREGISTER
#define SHIFTREGISTER
int shiftRegister(int x);
#endif

//Praktikum NWS3103 Arsitektur Sistem Komputer Tugas 7


//Modul :2 //Praktikum NWS3103 Arsitektur Sistem Komputer
//Percobaan :0 //Modul :2
//Tanggal : 11 Oktober 2018 //Percobaan :0
//Kelompok : //Tanggal : 11 Oktober 2018
//Rombongan : 02 //Kelompok :
//Nama (NIM) 1 : Albert A Simarmata(14S16014) //Rombongan : 02
// Nama File : shiftRegister.c //Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Deskripsi : fungsi yang merepresentasikan sebuah // Nama File : enkripsi.c
shift register pada rangkaian sistem digital. // Asumsi // Deskripsi : fungsi yang melakukan enkripsi sederhana
yang digunakan yaitu jumlah bit sebanyak 32 bit dan yang berfungsi menyamarkan 9 digit angka yang
dimasukan menggunakan keyboard oleh user //Modul :2
//Percobaan :0
#include<stdio.h> //Tanggal : 11 Oktober 2018
#include <enkripsi.h> //Kelompok :
int enkripsi (int angka, int desimal) //Rombongan : 02
{ //Nama (NIM) 1 : Albert A Simarmata(14S16014)
int byte_0, byte_1, byte_2, byte_3; // Nama File : main_enkripsi.c
byte_0 = (angka^desimal)& // Deskripsi : main program enkripsi
0x000000FF; #include <stdio.h>
byte_1 = (((angka>>8)^desimal)<<8) & #include "enkripsi.h"
0x0000FF00; int main()
byte_2 = (((angka>>16)^desimal)<<16) {
& 0x00FF0000; // deklarasi variabel
byte_3 = (((angka>>24)^desimal)<<24) int desimal, bilangan_pengenkripsi;
& 0xFF000000; //Meminta input masukan dari user
return printf("Masukan bilangan desimal
(byte_0+byte_1+byte_2+byte_3); // angka = angka yang akan di enkripsi (9 digit) : ");
yang akan di enkripsi // desimal = pengenkripsi (8 bit) scanf("%d", &desimal);
printf("Masukan bilangan desimal
} untuk input enkripsi : ");
scanf("%d", &bilangan_pengenkripsi);
bilangan_pengenkripsi =
bilangan_pengenkripsi & 0x000000FF;
//Praktikum NWS3103 Arsitektur Sistem Komputer // untuk memastikan bilangan desimal
//Modul :2 untuk input enkripsi sebanyak maksimum 8 bit, jika
//Percobaan :0 lebih maka akan dipotong
//Tanggal : 11 Oktober 2018 // Menampilkan hasil proses enkripsi
//Kelompok : printf("\n Hasil proses enkripsi :
//Rombongan : 02 %d\n",enkripsi(desimal,bilangan_pengenkripsi));
//Nama (NIM) 1 : Albert A Simarmata(14S16014) return 0;
// Nama File : enkripsi.h }

#ifndef ENKRIPSI Tugas 8


#define ENKRIPSI //Praktikum NWS3103 Arsitektur Sistem Komputer
int enkripsi (int angka, int desimal); //Modul :2
#endif //Percobaan :0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Praktikum NWS3103 Arsitektur Sistem Komputer //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014) double a;
// Nama File : coba.c double b;
double c;
void coba(int* x, int* y, int* z) double d;
{ // Algoritma
// Kamus a = *x;
int a; b = *y;
int b; c = *z;
int c; d = a+b;
int d; *y = d;
// Algoritma *z = b;
a = *x; *x = c;
b = *y; }
c = *z;
d = a+b;
*y = d; int main (void)
*z = b; {
*x = c; return(0);
} }

int main (void) Tugas 9


{
return(0); #include <stdio.h>
} #include <string.h>

int main()
//Praktikum NWS3103 Arsitektur Sistem Komputer {
//Modul :2 char kata[100];
//Percobaan :0 int i, n;;
//Tanggal : 11 Oktober 2018
//Kelompok : printf("Masukkan input kata \n");
//Rombongan : 02 gets(kata);//mengambil sebuah kata inputan
//Nama (NIM) 1 : Albert A Simarmata(14S16014) n=strlen(kata);
// Nama File : coba1.c printf("Karakter yang sudah dibalik
urutannya : \n");
void coba1(int* x, int* y, int* z) for (i=n-1;i>=0;i--)
{ {
// Kamus printf("%c",kata[i]);
} // Nama File : pointer_nama.c
// Deskripsi : merupakan sebuah program yang
printf ("\nPanjang kata = %d",n); didalamnya terdapat pengaplikasian array of pointer to
return 0; array of array of character.
}
#include<stdio.h>
#define MAX 10
#define SIZE 31
Tugas 10
int main ()
#include <stdio.h> {
char *nama[MAX],input[MAX][SIZE];
int main(){ int n,x,y;
int jM,n; printf("Masukkan nama kata per kata (maksimal
char nama[100][100]; 10 enter) : \n");
printf("Jumlah Mahasiswa : "); for(n=0;n<MAX;n++)
scanf("%d", &n); {
for(jM=0;jM<n;jM++){ gets(input[n]);
printf("Nama Mahasiswa-%d : ",jM+1); nama[n]=input[n];
scanf("%s", &nama[jM]); if(!strcmp(nama[n],"exit"))
} {
for(jM=0;jM<n;jM++){ break;
printf("%s",nama[jM]); }
printf("\n"); }
} printf("\n=======Output========\n");
for(x=0;x<n;x++)
return 0; {
} printf("%s ",nama[x] );
}

return (0);
Tugas 11 }
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : 11 Tugas 12
// Tanggal : 12 Oktober 2017 // Praktikum Arsitektur Sistem Komputer (NWS3102)
// Kelompok : 10 // Modul :2
// Rombongan : 1 // Percobaan : 11
// Nama (NIM) 1 : Albert A Simarmata (14S16014) // Tanggal : 11 Oktober 2018
// Rombongan : 2 x.nilai[i][j] +=
// Nama (NIM) 1 : Albert A Simarmata (14S16014) l*B.nilai[k][j];
// Nama File : mulMatriks.c }
// Deskripsi : merupakan sebuah yang akan }
melakukan proses perkalian antara dua inputan }
matriks.
return x;
#include <stdio.h> }
#include <stdlib.h>
#include "mulMatriks.h"
// Praktikum Arsitektur Sistem Komputer (NWS3102)
struct Matriks // Modul :2
{ // Percobaan : 11
int jumlahBaris; // Tanggal : 11 Oktober 2018
int jumlahKolom; // Rombongan : 2
int** nilai; // Nama (NIM) 1 : Albert A Simarmata (14S16014)
}; (14S15050)
struct Matriks mulMatriks (struct Matriks A, struct // Nama File : mulMatriks.h
Matriks B) // Deskripsi : merupakan sebuah fungsi yang
{ didalamnya merupakan penghubung antara fungsi
int i,j,k,l; mulmatriks.c dengan main.c.
struct Matriks x;
x.jumlahKolom = B.jumlahKolom; #ifndef MULMATRIKS
x.jumlahBaris = A.jumlahBaris; #define MULMATRIKS
extern struct Matriks mulMatriks
x.nilai = (int**) (struct Matriks A, struct Matriks B);
calloc(x.jumlahBaris,sizeof(int*)); #endif
for (i=0;i<x.jumlahBaris;i++)
{ // Praktikum NWS3103 Arsitektur Sistem Komputer
x.nilai[i] = (int*) // Modul : 2
calloc(x.jumlahKolom, sizeof(int)); // Percobaan : Program Enkripsi Sederhana
} // Tanggal : 11 Oktober 2018
for (k=0;k<A.jumlahKolom;k++) // Kelompok : 9
{ //
for (i=0;i<A.jumlahBaris;i++) // Nama File : main.c
{ // Deskripsi : main program untuk perkalian matrix
l = A.nilai[i][k];
for (j=0;j<x.jumlahKolom;j++)
{ #include<stdio.h>
#include<stdlib.h> {
#include"multmatrix.h" B.nilai[i]=
malloc(B.jumlahkolom*sizeof(int));
struct Matrix }
{ for(i=0;i<=B.jumlahbaris-1;i++)
int jumlahbaris; {
int jumlahkolom; for(j=0;j<=B.jumlahkolom-1;j++)
int** nilai; {
}; printf("Masukkan elemen ke
%d, %d: ", i+1,j+1);
int main(void) scanf("%d", &B.nilai[i][j]);
{ }
struct Matrix A,B,C; }
int i,j;
printf("Masukkan jumlah baris matrix A: "); if(A.jumlahkolom = B.jumlahbaris)
scanf("%d", &A.jumlahbaris); {
printf("Masukkan jumlah kolom matrix A: "); C = multmatrix(A,B);
scanf("%d", &A.jumlahkolom); printf("\nHasil perkalian dua buah
A.nilai = malloc(A.jumlahbaris*sizeof(int*)); matrix:\n");
for(i=0;i<=A.jumlahbaris;i++) for(i=0;i<=A.jumlahbaris-1;i++)
{ {
A.nilai[i]= for(j=0;j<=C.jumlahkolom-
malloc(A.jumlahkolom*sizeof(int)); 1;j++)
} {
for(i=0;i<=A.jumlahbaris-1;i++) printf("%d ",
{ C.nilai[i][j]);
for(j=0;j<=A.jumlahkolom-1;j++) }
{ printf("\n");
printf("Masukkan elemen ke }
%d, %d: ", i+1,j+1); }
scanf("%d", &A.nilai[i][j]); else
} {
} printf("Tidak memenuhi syarat
printf("Masukkan jumlah baris matrix B: "); perkalian matrix!");
scanf("%d", &B.jumlahbaris); }
printf("Masukkan jumlah kolom matrix B: ");
scanf("%d", &B.jumlahkolom); return 0;
B.nilai = malloc(A.jumlahbaris*sizeof(int*)); }
for(i=0;i<=B.jumlahbaris;i++)
{
int i;
int value = 0;
for (i=0;i<=6;i++)
{
value += A[i]*pow(2,i);
}
Tugas 13 value -= A[7]*pow(2,7);
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : 2 return value;
// Percobaan : 12 }
// Tanggal : 12 Oktober 2017
// Kelompok : 10 int main (void)
// Rombongan : 1 {
// Nama (NIM) 1 : Albert A Simarmata (14S16014) int x,y,i,temp,hasil,plus, min;
// Nama File : main.c int C[8],D[8],E[8],result[8];
// Deskripsi : merupakan sebuah file yang int carry = 0;
didalamnya terdapat proses penjumlahan dan printf("Masukan bilangan pertama :\n");
pengurangan biner menggunakan fungsi array. scanf("%d",&x);
#include <stdio.h> printf("Masukan bilangan kedua :\n");
#include <math.h> scanf("%d",&y);

int fungsiXor (int x, int y) for (i=0;i<8;i++)


{ {
int result; C[i] = getBit(x,i);
result = ~((~(~x&y))&(~(x&~y))); D[i] = getBit(y,i);
return result;#ifndef START_VAL }
#define START_VAL 0 for (i=0;i<8;i++)
void sumofbiner (int bil1, int bil2); {
#endif result[i] =

} fungsiXor(fungsiXor(C[i],D[i]),carry);carry
=((C[i]&carry)|(D[i]&carry))|(C[i]&D[i]);
int getBit (int x, int n) }
{ printf("Hasil penjumlahan biner : ");
return ((x>>n)&1); for (i=0;i<8;i++)
} {
printf("%d",result[i]);
int bitDes (int *A) }
plus = bitDes(result); {
printf("\nHasil desimal : %d",plus); int des_1, des_2;
y = ~y+1; printf("Masukkan bilangan desimal pertama:");
for (i=0;i<8;i++) scanf("%d",&des_1);
{ printf("Masukkan bilangan desimal kedua:");
E[i] = getBit(y,i); scanf("%d",&des_2);
} sumofbiner(des_1,des_2);
for (i=0;i<8;i++) return 0;
{ }
result[i] =
fungsiXor(fungsiXor(C[i],E[i]),carry);
carry
=((C[i]&carry)|(E[i]&carry))|(C[i]&E[i]); //Praktikum NWS3103 Arsitektur Sistem Komputer
} //Modul :2
printf("\nHasil pengurangan biner: "); //Percobaan :0
//Tanggal : 11 Oktober 2018
for (i=0;i<8;i++) //Kelompok :
{ //Rombongan : 02
printf("%d",result[i]); //Nama (NIM) 1 : Albert A Simarmata(14S16014)
}
min = bitDes(result); #ifndef START_VAL
printf("\nHasil desimal : %d",min); #define START_VAL 0
void sumofbiner (int bil1, int bil2);
return(0); #endif
}

//Praktikum NWS3103 Arsitektur Sistem Komputer


//Modul :2
//Percobaan :0
//Tanggal : 11 Oktober 2018
//Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Nama File : main.c
//Deskrips : Program Utama
#include <stdio.h>
#include "sumofbiner.h"
int main ()

Anda mungkin juga menyukai