Minggu, 12 Februari 2023

Operator Bitwise di Autolisp

 Di autolisp fungsi bitwise antara lain :

  1. ~ (bitwise not)
  2. lsh
  3. logand
  4. logior
  5. boole
Untuk memahami fungsi bitwise dan perilakunya, sebaiknya terlebih dahulu memahami tipe data integer dan representasinya dalam bilangan biner yang digunakan dalam autolisp. 
Bilangan integer AutoLISP adalah bilangan bertanda 32-bit dengan nilai mulai dari +2.147.483.647 hingga -2.147.483.648.
representasi bilangan +2.147.483.647 dalam bilangan biner bertanda 32-bit adalah

0111 1111 1111 1111 1111 1111 1111 1111 

representasi bilangan -2.147.483.648 dalam bilangan biner bertanda 32-bit adalah

1000 0000 0000 0000 0000 0000 0000 0000

Untuk bilangan positif mungkin ngga aneh ya, karena nilainya bisa dikonversi dari penambahan bilangan binernya, misal
0000 0000 0000 0000 0000 0000 0000 0001  =  (1x20) = 1
0000 0000 0000 0000 0000 0000 0000 0010  =  (1x21)  + (0x20) = 2
0000 0000 0000 0000 0000 0000 0000 0011  =  (1x21)  + (0x21) = 3
dan seterusnya

Kalau bilangan negatif, bit paling kiri jika nilainya 1 maka negatif, tetapi bit lainnya tidak sama dengan bilangan positif nya.
11111111111111111111111111111111 = -1
11111111111111111111111111111110 = -2
11111111111111111111111111111101 = -3
Representatif bilangan negatif seperti ini dinamakan komplemen 2, yaitu komplemen bilangan positif + 1.

Untuk mengecek integer autolisp menggunakan komplemen dua dengan cara:
(~ 0) = -1 = - (0 + 1)
(~ 1) = -2 = - (1 + 1)
.
.
.
(~ 100) = -101 = - (100 + 1)


1. fungsi ~ (bitwise not)
Fungsi ini membalik nilai bit. nilai bit 0 menjadi 1, nilai bit 1 menjadi 0. kenapa ~0 nilainya jadi -1, karena nilai integer autolisp selalu disimpan dalam 32 bit. nilai integer 0 representasinya dalam integer 32 bit bertanda adalah :
0000 0000 0000 0000 0000 0000 0000 0000
sehingga (~ 0) menghasilkan :
11111111111111111111111111111111 = -1

2, lsh
syntak : (lsh  [ integer [ numbits ]] )
fungsi ini menggeser nilai bit. jika numbits bernilai positif maka akan digeser ke kiri sesuai nilai numbit sebaliknya jika numbits bernilai negatif akan digeser ke kanan. nilai bit yang kosong setelah penggeseran akan diisi nilai 0.

contoh :
(lsh 1 1)
integer 1, 0000 0000 0000 0000 0000 0000 0000 0001 digeser ke kiri sebanyak 1 bit, sehingga menjadi

0000 0000 0000 0000 0000 0000 0000 0010, yang nilainya 2

3. logand
syntak: (logand [int int ...])
menghasilkan nilai bitwise logis AND dari bilangan integer.

4. logior
syntak: (logior [int int ...])
menghasilkan nilai bitwise logis OR dari bilangan integer.

5. Boole
Syntak: (boole operator int1 [int2 ...])
merupakan fungsi umum untuk operasi bit pada autolisp.

operator merupakan bilangan integer antara 0-15.

Tabel kebenaran operator bit
Int1Int2Operator Bit
008
014
102
111

Dari operator bit diatas berikut ekuivalensi fungsi-fungsi bitwise yang umum :
OperatorOperationResulting bit is 1 if
1ANDBoth input bits are 1
6XOROnly one of the two input bits is 1
7OREither or both of the input bits are 1
8NORBoth input bits are 0 (1's complement)

Note : saya masih bingung di Bricscad 2018 mengapa (boole 8 0 0) maupun (boole 1 -1 -1) menghasilkan bilangan integer 4294967295, bukan -1.
saya cek di Bricscad 2013 ternyata menghasilkan nilai -1.
----000--------


Tidak ada komentar:

Posting Komentar