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 << 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) x =" 0000" x =" x-t." t =" x." x =" x" x =" 32" x =" 30" result =" x*M" m =" 30" m =" 30" m =" 30" m =" 15">> 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… ;-)
Implementasi Right Shift dan Left Shift di C
Selasa, 18 Januari 2011
Langganan:
Posting Komentar (Atom)
0 komentar:
Posting Komentar
Silahkan beri komentar dengan bijak dan jangan sampai komentar anda masuk dalam {COMMENTS SPAM}. Thanks