Basis memiliki beberapa fungsi antara lain konversi numerik dan konversi biner – teks [RFC4648, RFC9285, RFC1924]. Dalam konteks konversi numerik, radix atau basis merupakan angka dari digit unik untuk merepresentasikan angka, termasuk angka 0. Radix berasal dari bahasa latin yang berarti “root” atau “akar”. Dalam konteks konversi biner – teks basis merupakan karakter yang dapat dicetak (printable character) yang digunakan dalam merepresentasikan biner.
Daftar Isi
Radix / Basis
Hexa decimal merupakan basis 16, kombinasi alfa numerik 0-9 dan A-F. Mac Address dan IPv6 merupakan contoh penerapannya. Apa sebutan untuk basis 36 yang digunakan pada tanda panggil radio amatir dan plat nomor kendaraan?
— Radix / Basis
Basis | Sebutan | Range | Contoh Implementasi |
---|---|---|---|
2 | binary | 0-1 | Komputasi digital |
3 | ternary | 0-2 | |
4 | quaternary | 0-3 | |
5 | quinary | 0-4 | |
6 | senary | 0-5 | |
7 | septenary, septimal | 0-6 | |
8 | octal | 0-7 | |
9 | nonary | 0-8 | |
10 | decimal, denary | 0-9 | |
11 | unodecimal, undenary | 0-9,A | |
12 | duodecimal, dozenal | 0-9,A-B | |
16 | hexadecimal, sexadecimal, sedecimal | 0-9,A-F | Mac Address, IPv6, Konversi biner ke teks |
20 | vigesimal | 0-9,A-J | |
32 | duotrigesimal | A-Z,2-7 | Konversi biner ke teks |
36 | hexa trigesimal | 0-9,A-Z | Call sign radio, Plat nomor, Alfa numerik |
45 | Qr Code | ||
64 | tetrasexagesimal | A-Z,a-z,0-9,+,/,-,_ | Konversi biner ke teks |
85 | Karakter ASCII dari kode 33 | Konversi biner ke teks (855 hanya sedikit saja lebihnya dari 232) |
Slashed Zero
Slashed zero merupakan representasi dari angka arab nol (0) dengan tanda garis miring, titik tengah atau modifikasi bentuk. Tujuan penggunaan slashed zero ini untuk menghindari kebingungan antara angka nol dengan huruf o.
Tips mencari tipe huruf yang terdapat slashed zero:
- Jenis Mono (tetapi tidak semua)
- Huruf yang digunakan di Terminal
- Huruf yang digunakan pada Editor Bahasa Pemrograman / Source Code
Selain angka 0-huruf o, ada beberapa angka dan huruf yang rentan membingungkan, antara lain angka 1-huruf el-huruf i dan angka 5-huruf es. Untuk beberapa tipe huruf tertentu mungkin ada angka dan huruf lain yang mirip.
Baris pertama menggunakan huruf yang benar-benar berbeda. Baris kedua terjadi kebingungan untuk angka 0-huruf o kapital dan huruf el-huruf I kapital. Baris ketiga terjadi kebingungan angka 1-huruf el. Baris keempat terjadi kebingungan angka 0-huruf o kapital, angka 1-huruf el-huruf i kapital dan angka 5-huruf es kapital.
Baris kelima dibaca JZ501B, JZ50IB, JZ5O1B, JZ5OIB, JZS01B, JZS0IB, JZSO1B, atau JZSOIB? Penggunaan huruf pada baris kelima menimbulkan kebingungan antara 0, O, 1, i, 5 dan S; sehingga perlu diganti dengan tipe huruf lain yang setiap angka/hurufnya dapat dibedakan.
Oleh karena itu, berikut adalah tips untuk mendapatkan huruf yang dapat dibedakan:
- Gunakan kalimat 105 QUiCK lIONS [satu nol lima qiu_kapital u_kapital i c_kapital k_kapital el i_kapital o_kapital n_kapital s_kapital]
- Contoh dapat dilihat di https://fonts.google.com/?preview.text=105%20QUiCK%20lIONS&classification=Monospace
Basis Numerik
|-Algoritma Basis Numerik (2 <= radix <= 36)
base_string ← "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
//base to integer
procedure from_base(stringnumber, base)
n ← 0
isnegative ← stringnumber[0] = "-"
if isnegative, then
i ← 1
else
i ← 0
while i < len(stringnumber), do
n ← base * n + base_string[stringnumber[i]]
i ← i + 1
if isnegative, then
return -n
else
return n
//integer to base
procedure to_base(number, base)
result ← ""
isnegative ← number < 0
number ← absolute(number)
while number, do
result ← result + base_string[number % base]
number ← number / base
if isnegative, then
return "-" + result
else if result = "", then
return "0"
else
return result
//base to base
procedure convert_base(string, base_from, base_to)
//built-in (faster)
number_from ← int(string, base_from)
//custom
number_from ← from_base(string, base_from)
return to_base(number_from, base_to)
|-Fungsi Basis Numerik
- MySQL:
conv(number, from_base, to_base)
- Java:
digit(char c, int radix)
forDigit(int digit, int radix)
Long.ParseLong(String s, int radix)
Long.toString(long l, int radix)
- PHP:
base_convert(string $num, int $from_base, int $to_base)
- C++:
itoa ( int value, char * str, int base )
strtol (const char* str, char** endptr, int base)
- Python:
int(x, base=10)
to_base(x, base)
#example: python to_base
base_string = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def to_base(number, base):
result = ""
isneg = number < 0;
number = abs(number)
while number:
result += base_string[number % base]
number //= base
return isneg and ("-" + result[::-1]) or (result[::-1] or "0")
#example: python to_base
def from_base(stringnumber, base):
n = 0
isneg = stringnumber.find("-") == 0
i = isneg and 1 or 0
for d in stringnumber[i:]:
n = base * n + base_string.index(d)
return isneg and -n or n
Basis Konversi Biner – Teks (Base Encoding)
Pengkodean data (konversi biner – teks) digunakan pada banyak situasi untuk menyimpan atau melakukan pertukaran data pada suatu lingkungan.
Proses pengkodean berlangsung dengan cara mengelompokkan byte.
|-Base16, Base32 dan Base64
Pada base64, pengelompokan dilakukan setiap 3 byte (24-bit). Pada base32, pengelompokan dilakukan setiap 6 byte (48-bit). Pada base16, pengelompokan dilakukan setiap 1 byte (8-bit).
Setelah itu akan dilakukan pengkodean setiap 6-bit untuk base64, 5-bit untuk base32 dan 4-bit untuk base16 ke dalam karakter yang telah ditetapkan dalam dokumen standar RFC4648.
|-Base85
Hal berbeda berlaku untuk base85. Pada base85, pengelompokan dilakukan setiap 4 byte (32-bit) kemudian dikonversi ke dalam desimal.
Nilai konversi tersebut kemudian dibagi dengan 85, sisanya ditambah dengan 33. Kemudian hasilnya dikonversi ke dalam ASCII dimulai dari karakter nomor 33.
|-Koreksi Sisa
Sisa karakter pada base32, base64 dan base85 akan diisi dengan biner 0. Base32 menggunakan = untuk setiap sisa 0, base64 menggunakan = untuk setiap sisa 00, sedangkan untuk base85 untuk karakter dengan biner 0 semua akan dihapus.
|-Perubahan Karakter
Sisi negatif dari pengkodean data ini adalah jumlah karakter yang lebih banyak daripada aslinya karena menggunakan set karakter yang terbatas (dalam konteks ASCII), yaitu 16, 32, 64, 85, maksimal 95 karakter.
No | Base | Kelompok | Perubahan Karakter |
---|---|---|---|
1 | 16 | 1 byte | 2/1 kali |
2 | 32 | 5 byte | 8/5 kali |
3 | 64 | 3 byte | 4/3 kali |
4 | 85 | 4 byte | 5/4 kali |
Biner Pada Transmisi Digital
Data yang dikirimkan secara digital tidak seperti mengirimkan surat dengan huruf-huruf yang mudah dibaca, misalnya Hello World, tetapi dikirimkan dalam representasi binernya 01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100.
0 tidak selalu berarti tanpa sinyal dan 1 tidak selalu berarti menggunakan sinyal positif/negatif, misalnya pada pengkodean Manchester. Pada pengkodean Manchester, sinyal rendah ke tinggi merepresentasikan 1 dan sinyal tinggi ke rendah merepresentasikan 0.
Pengkodean Manchester melakukan XOR pada data dengan clock. Implementasi pada IoT dapat dilihat pada artikel ini.
Sifat dari XOR adalah memberikan nilai 0 apabila dua input sama dan memberikan nilai 1 apabila dua input berbeda.
0 ⊕ 0 = 0
1 ⊕ 1 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
Demikian, semoga bermanfaat. [bst]
Sumber:
- https://en.wikipedia.org/wiki/List_of_numeral_systems
- https://en.wikipedia.org/wiki/Slashed_zero
- https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_conv
- https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html
- https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html
- https://www.php.net/manual/en/function.base-convert.php
- https://cplusplus.com/reference/
- https://docs.python.org/3/library/functions.html#int
- https://stackoverflow.com/questions/2267362/how-to-convert-an-integer-to-a-string-in-any-base/53675480#53675480