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:

cpp
#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:

text
Huruf           : A
Kode ASCII      : 65
Huruf + 1 (int) : 66
Huruf berikutnya: B
Lulus / habis   : 1 / 0
Lulus / habis   : true / false

Mari kita bedah bagian aritmetikanya:

  1. Baris 6 (int kodeAscii = huruf;): char diubah menjadi int begitu saja tanpa cast, karena char adalah tipe integral — nilainya 65. Konversi kecil ke besar seperti ini aman dan otomatis (pola yang dibedah di Chapter Konversi Tipe Data).
  2. Baris 8 (char hurufBerikutnya = huruf + 1;): ekspresi huruf + 1 dievaluasi dalam int menghasilkan 66, lalu disimpan kembali ke variabel char. Itulah sebabnya baris “Huruf + 1 (int)” mencetak angka 66 (tipenya int), sedangkan baris “Huruf berikutnya” mencetak karakter 'B' (tipenya char). Menaikkan kode karakter satu tingkat memang berpindah ke huruf berikutnya dalam urutan ASCII.
  3. Baris 19 (std::boolalpha): sebelum manipulator ini dipasang, true tercetak 1 dan false tercetak 0. Setelahnya, kedua nilai yang sama tercetak sebagai teks true / 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:

TipeUkuran khasTujuan
char1 bytekarakter dasar, teks ASCII
wchar_t2-4 byte (platform-dependent)karakter lebar, umum di API Windows
char8_t1 byte (unit kode UTF-8)teks UTF-8, sejak C++20
char16_t2 byte (unit kode UTF-16)teks UTF-16
char32_t4 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.