Menu Home

Implementasi Right Shift dan Left Shift di C

Implementasi dari Right Shift dan Left Shift.

lihat potongan source code C berikut:

#define M //konstanta pertama
#define N //konstanta kedua
int arith (int x, int y)
{
int result = 0;
result = x*M + y/N;
return result;
}

lalu source code ini dikompilasi dengan kompiler penyederhanaan biner dan menghasilkan keluaran seperti ini:

int t = x;
x = x << 4;
x = x-t;
y = y >> 2; //arithmetics shift
int x + y;

Sekarang pertanyaannya…

berapakah nilai konstanta N dan M?

nih penjelasannya…

untuk memulainya, karena nilai x dan y adalah inputan user, kita misalkan saja nilainya.

dimisalkan nilai x = 2 dan nilai y=8.

nilai x dan y di konversi ke dalam biner (32 bit) menjadi

x = 0000 … 0000 0010

y = 0000 … 0000 1000

sekarang, lihat lagi hasil kompilasinya…

nilai x di geser 4 bit ke kiri (x<<4)

sehingga hasilnya

x = 0000 … 0010 0000 (biner) = 32 (desimal)

lalu proses x = x-t. nilai t merupakan nilai awal x (yaitu 2) karena sebelumnya di deklarasi int t = x.

jadi perhitungannya:

x = x – t
x = 32 – 2
x = 30

sekarang lihat lagi source code awal sebelum dikompilasi.

result = x*M + y/N;

hubungkan dengan hasil kompilasi

int x + y;

disini terlihat bahwa x yang kita cari sebelumnya, didalam source code awal merupakan nilai dari x*M. sekarang kita masukkan dalam persamaan.

x * M = 30 (30 adalah nilai x yang dicari tadi)
2 * M = 30 (2 adalah nilai awal x yang dimisalkan tadi)
M = 30 / 2
M = 15

nilai M sudah di dapat sekarang kita cari nilai N.

nilai y tadi dimisalkan 8. lalu nilai y digeser ke kanan 2 bit (y >> 2) secara arithmetic. hasilnya:

y = 000000 … 0000 10 (biner) = 2 (desimal)

sekarang kita hubungkan source awal dengan source hasil kompilasi :

result = x*M + y/N;

hubungkan dengan hasil kompilasi

int x + y;

disitu terlihat hasil y yang telah di-shift merupakan hasil dari y/N. Masukkan lagi ke persamaan

y / N = 2 (2 adalah hasil penggeseran)
8 / N = 2 (8 adalah nilai y yang dimisalkan tadi)
N = 8 / 2
N = 4

sekarang nilai M dan nilai N sudah didapat. Maka selesailah soal ini dengan hasil

N = 4
M = 15

kalo ada kesalahan mohon dikoreksi yah… ;-)

Categories: Komputer & Internet Pelajaran & Tugas Pemrograman Personal

Tagged as:

Bima J.

3 replies

%d bloggers like this: