Dua tipe terakhir dari keluarga fundamental punya bentuk nilai yang paling sederhana. char menyimpan tepat satu karakter — huruf, digit, atau simbol — sedangkan bool hanya mengenal dua nilai: true dan false. Sederhana bukan berarti remeh: char adalah bata penyusun semua teks yang kita cetak lewat std::cout, dan bool menjadi tipe dasar untuk seluruh pengambilan keputusan di program. Anehnya, keduanya pada dasarnya adalah integer yang menyamar — dan di Chapter ini kita membuktikannya dengan kode yang benar-benar dijalankan.
char: Satu Karakter, Satu Byte #
char dirancang untuk menyimpan satu karakter dari set karakter dasar C++, dan di semua platform yang lazim berukuran satu byte. Nilainya ditulis di antara tanda kutip satu: 'A', '7', '+', atau '\n' untuk baris baru (daftar lengkap karakter khusus seperti \n dan \t sudah kita bahas pada Chapter Escape Sequences). Di balik layar, char menyimpan angka kode karakter — untuk nilai ASCII, 'A' tersimpan sebagai 65, 'B' sebagai 66, dan 'a' sebagai 97. Perhatikan juga beda penulisannya dengan string: 'A' (kutip satu) adalah satu karakter bertipe char, sedangkan "A" (kutip dua) adalah string literal yang berisi dua karakter, 'A' plus penanda akhir teks \0.
Aritmetika pada char: Buktinya Integer #
Karena char pada dasarnya integer kecil, kita boleh menghitung dengannya — dan inilah eksperimen yang membuktikannya:
#include <iomanip>
#include <iostream>
int main() {
char huruf = 'A'; // satu karakter, satu byte
int kodeAscii = huruf; // char adalah integer kecil: 'A' = 65
char hurufBerikutnya = huruf + 1; // aritmetika char: 65 + 1 = 'B'
bool lulus = true;
bool habisStok = false;
std::cout << "Huruf : " << huruf << "\n";
std::cout << "Kode ASCII : " << kodeAscii << "\n";
std::cout << "Huruf + 1 (int) : " << huruf + 1 << "\n";
std::cout << "Huruf berikutnya: " << hurufBerikutnya << "\n";
std::cout << "Lulus / habis : " << lulus << " / " << habisStok << "\n";
std::cout << std::boolalpha; // tampilkan bool sebagai teks
std::cout << "Lulus / habis : " << lulus << " / " << habisStok << "\n";
return 0;
}Output yang Dihasilkan:
Huruf : A
Kode ASCII : 65
Huruf + 1 (int) : 66
Huruf berikutnya: B
Lulus / habis : 1 / 0
Lulus / habis : true / falseMari kita bedah bagian aritmetikanya:
- Baris 6 (
int kodeAscii = huruf;):chardiubah menjadiintbegitu saja tanpa cast, karenacharadalah tipe integral — nilainya 65. Konversi kecil ke besar seperti ini aman dan otomatis (pola yang dibedah di Chapter Konversi Tipe Data). - Baris 8 (
char hurufBerikutnya = huruf + 1;): ekspresihuruf + 1dievaluasi dalamintmenghasilkan66, lalu disimpan kembali ke variabelchar. Itulah sebabnya baris “Huruf + 1 (int)” mencetak angka66(tipenyaint), sedangkan baris “Huruf berikutnya” mencetak karakter'B'(tipenyachar). Menaikkan kode karakter satu tingkat memang berpindah ke huruf berikutnya dalam urutan ASCII. - Baris 19 (
std::boolalpha): sebelum manipulator ini dipasang,truetercetak1danfalsetercetak0. Setelahnya, kedua nilai yang sama tercetak sebagai tekstrue/false.
Cara pandang “karakter adalah angka” ini bukan sekadar keunikan; banyak algoritma teks mengandalkannya, misalnya mengubah huruf kecil ke huruf besar dengan menggeser kode karakter. Batasnya juga perlu diingat: satu char hanya satu byte, sehingga cukup untuk ASCII tetapi tidak untuk satu karakter penuh teks CJK atau emoji.
bool: true dan false #
Tipe bool hanya memiliki dua nilai, ditulis true dan false — keduanya kata kunci resmi C++. Variabel boolean biasanya lahir dari perbandingan atau diberi nilai langsung, dan meskipun std::cout menampilkannya sebagai 1/0 secara default, nilai yang tersimpan tetap true/false utuh. Nama bool berasal dari Boolean, sistem logika matematika George Boole yang hanya mengenal benar dan salah; seluruh struktur keputusan C++ (if, while, dan kawan-kawannya di Section Control Flow) bekerja di atas tipe ini.
Keluarga char Lain untuk Teks Unicode #
Satu byte memang tidak cukup untuk semua bahasa dunia, sehingga standar menyediakan varian char yang lebih lebar:
| Tipe | Ukuran khas | Tujuan |
|---|---|---|
char | 1 byte | karakter dasar, teks ASCII |
wchar_t | 2-4 byte (platform-dependent) | karakter lebar, umum di API Windows |
char8_t | 1 byte (unit kode UTF-8) | teks UTF-8, sejak C++20 |
char16_t | 2 byte (unit kode UTF-16) | teks UTF-16 |
char32_t | 4 byte (unit kode UTF-32) | teks UTF-32 |
Untuk kebanyakan program yang menyapa pengguna berbahasa Indonesia, char dan std::string sudah memadai, dan teks Unicode lengkap paling nyaman ditangani lewat std::u8string, std::u16string, atau pustaka khusus — topik yang tersentuh lagi pada Section Array dan String. Yang penting untuk sekarang: anggota-anggota tabel di atas adalah tipe berbeda, bukan sekadar ukuran berbeda, sehingga compiler menolak pencampuran mereka tanpa konversi eksplisit.
Dengan char dan bool selesai, peta tipe fundamental kita tinggal satu wilayah yang belum dibedah habis: variasi signed dan unsigned pada bilangan bulat. Perbedaannya terlihat sepele — boleh negatif atau tidak — tetapi jebakannya cukup dalam untuk mendapat chapter sendiri.
Rujukan resmi untuk topik Chapter ini: fundamental types dan escape sequences di cppreference.