Format Angka Pemrograman
Bagaimana Bahasa Pemrograman Menangani Angka
Pahami Format AngkaSetiap bahasa pemrograman memerlukan cara untuk merepresentasikan angka. Memahami tipe integer, format floating-point, dan notasi basis bilangan membantumu menulis kode yang benar dan menghindari bug halus terkait presisi, overflow, dan representasi.
Tipe Integer
Integer Ukuran Tetap
| Tipe | Bit | Rentang Bertanda | Rentang Tak Bertanda |
|---|---|---|---|
| int8 | 8 | -128 hingga 127 | 0 hingga 255 |
| int16 | 16 | -32.768 hingga 32.767 | 0 hingga 65.535 |
| int32 | 32 | -2,1M hingga 2,1M | 0 hingga 4,3M |
| int64 | 64 | ±9,2 kuintiliun | 0 hingga 18,4 kuintiliun |
Contoh Bahasa
- C/C++: int, long, int32_t, uint64_t
- Java: byte, short, int, long
- Rust: i8, i16, i32, i64, u8, u16, u32, u64
- Go: int8, int16, int32, int64
Angka Floating-Point
Standar IEEE 754
- float (32-bit): ~7 digit desimal presisi
- double (64-bit): ~15-16 digit desimal presisi
Struktur
- Bit tanda (1 bit)
- Eksponen (8 atau 11 bit)
- Mantissa/signifikan (23 atau 52 bit)
Masalah Terkenal
0.1 + 0.2 = 0.30000000000000004
Ini terjadi karena 0,1 dan 0,2 tidak bisa direpresentasikan secara tepat dalam floating-point biner.
Notasi Basis Bilangan per Bahasa
| Bahasa | Biner | Oktal | Hex |
|---|---|---|---|
| JavaScript | 0b1010 | 0o12 | 0x0A |
| Python 3 | 0b1010 | 0o12 | 0x0A |
| C/C++/Java | 0b1010* | 012 | 0x0A |
| C# | 0b1010 | — | 0x0A |
| Ruby | 0b1010 | 0o12 | 0x0A |
| Go | 0b1010 | 0o12 | 0x0A |
| Rust | 0b1010 | 0o12 | 0x0A |
*C: Literal biner ditambahkan di C23; C++14 dan Java 7+ mendukungnya.
Angka di JavaScript
Karakteristik
- Semua angka adalah floating-point 64-bit (IEEE 754)
- Rentang integer aman: ±9.007.199.254.740.991 (2⁵³-1)
- BigInt untuk integer lebih besar (ES2020+)
Literal Angka
let dec = 255; // Desimal let hex = 0xFF; // Heksadesimal let bin = 0b11111111; // Biner let oct = 0o377; // Oktal let big = 9007199254740992n; // BigInt
Gotcha
0.1 + 0.2 !== 0.3(floating-point)parseInt('08') === 8(diperbaiki di JS modern)
Angka di Python
Karakteristik
- Integer memiliki presisi sembarang (tidak ada overflow)
- Float adalah IEEE 754 64-bit
- Bilangan kompleks built-in
Literal Angka
dec = 255 # Desimal hex_num = 0xFF # Heksadesimal bin_num = 0b11111111 # Biner oct_num = 0o377 # Oktal complex_num = 3+4j # Kompleks
Konversi
bin(255) # '0b11111111'
hex(255) # '0xff'
oct(255) # '0o377'
int('FF', 16) # 255Angka Presisi Sembarang
Kapan Dibutuhkan
- Kriptografi (kunci besar)
- Perhitungan keuangan (desimal tepat)
- Komputasi ilmiah (presisi ekstrem)
Dukungan Bahasa
- Python: int (selalu presisi sembarang)
- JavaScript: BigInt (untuk integer)
- Java: BigInteger, BigDecimal
- C#: BigInteger, decimal
Contoh: JavaScript BigInt
const big = 9007199254740993n; const result = big * 2n; // Harus menggunakan sufiks n
Output Terformat
JavaScript
num.toString(2) // String biner num.toString(16) // String hex num.toFixed(2) // 2 tempat desimal
Python
f"{255:b}" # '11111111' (biner)
f"{255:x}" # 'ff' (hex)
f"{255:08b}" # '11111111' (dengan padding)C/C++
printf("%d", num); // Desimal
printf("%x", num); // Hex (huruf kecil)
printf("%X", num); // Hex (huruf besar)
printf("%o", num); // OktalOperasi Bitwise
Tersedia di kebanyakan bahasa untuk tipe integer:
| Operasi | Simbol | Contoh |
|---|---|---|
| AND | & | 5 & 3 = 1 |
| OR | | | 5 | 3 = 7 |
| XOR | ^ | 5 ^ 3 = 6 |
| NOT | ~ | ~5 = -6 |
| Left shift | << | 5 << 1 = 10 |
| Right shift | >> | 5 >> 1 = 2 |
Kesimpulan
Bahasa pemrograman menangani angka melalui berbagai tipe: integer ukuran tetap (int32, int64), floating-point (float, double), dan tipe presisi sembarang (BigInt, BigDecimal). Memahami notasi basis (prefiks 0b, 0o, 0x) dan keterbatasan setiap tipe—terutama masalah presisi floating-point—membantu menghindari bug halus. Ketika aritmetika desimal tepat penting (keuangan, mata uang), gunakan tipe decimal khusus alih-alih floating-point.