Categories
Tutorial, Manual, Tips dan Trik

Radix / Basis

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
https://bptsi.unisayogya.ac.id/radix-basis/ 2023-12-06 18:01:44
BasisSebutanRangeContoh Implementasi
2binary0-1Komputasi digital
3ternary0-2
4quaternary0-3
5quinary0-4
6senary0-5
7septenary, septimal0-6
8octal0-7
9nonary0-8
10decimal, denary0-9
11unodecimal, undenary0-9,A
12duodecimal, dozenal0-9,A-B
16hexadecimal, sexadecimal, sedecimal0-9,A-FMac Address, IPv6, Konversi biner ke teks
20vigesimal0-9,A-J
32duotrigesimalA-Z,2-7Konversi biner ke teks
36hexa trigesimal0-9,A-ZCall sign radio, Plat nomor, Alfa numerik
45Qr Code
64tetrasexagesimalA-Z,a-z,0-9,+,/,-,_Konversi biner ke teks
85Karakter ASCII dari kode 33Konversi 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:

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.

tangkapan layar dari https://en.wikipedia.org/wiki/Ascii85

|-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.

NoBaseKelompokPerubahan Karakter
1161 byte2/1 kali
2325 byte8/5 kali
3643 byte4/3 kali
4854 byte5/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:

By basit

Biro Pengembangan Teknologi Dan Sistem Informasi

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.