Tipe char adalah tipe integer terkecil di C: hanya 1 byte. Meskipun namanya menyiratkan “karakter”, pada dasarnya char adalah tipe integer 8-bit yang biasanya dipakai untuk menyimpan kode ASCII. Pemisahan ini penting karena banyak operasi (membaca file biner, berkomunikasi lewat network socket, manipulasi buffer) membutuhkan tipe 1 byte yang tetap—dan char memenuhi peran itu. Pada Chapter ini kita akan memahami char sebagai integer kecil sekaligus sebagai wadah karakter, beserta escape sequence yang sering dipakai untuk menuliskan karakter khusus.

char Adalah Integer 8-bit #

Standar C menjamin sizeof(char) == 1 di semua platform. Yang tidak dijamin adalah apakah char bertanda (signed) atau tak bertanda (unsigned)—hal itu bergantung pada compiler. Pada GCC di x86_64, char secara default bertanda, dengan rentang -128 hingga 127. Untuk karakter ASCII standar (kode 0-127), perbedaan ini tidak menjadi masalah karena seluruh kode ASCII positif.

c
#include <stdio.h>

int main(void) {
    char huruf = 'A';
    char angka_char = '7';
    char newline = '\n';

    printf("huruf       = %c (kode ASCII %d)\n", huruf, huruf);
    printf("angka_char  = %c (kode ASCII %d)\n", angka_char, angka_char);
    printf("newline     = kode ASCII %d\n", newline);
    printf("ukuran char = %zu byte\n", sizeof(char));
    return 0;
}

Output yang Dihasilkan:

text
huruf       = A (kode ASCII 65)
angka_char  = 7 (kode ASCII 55)
newline     = kode ASCII 10
ukuran char = 1 byte

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (char huruf = 'A';): literal 'A' sebenarnya adalah konstanta integer bernilai 65 (kode ASCII huruf A); compiler menyimpannya dalam 1 byte.
  2. Baris 5 (char angka_char = '7';): tanda kutip membedakan karakter '7' (kode ASCII 55) dari angka 7 (literal integer); keduanya berbeda jauh.
  3. Baris 6 (char newline = '\n';): escape sequence \n adalah satu karakter dengan kode ASCII 10, bukan dua karakter.
  4. Baris 8 (%c dan %d): format specifier %c mencetak sebagai karakter, %d mencetak sebagai integer desimal—keduanya membaca byte yang sama.
  5. Baris 11 (sizeof(char)): standar C menjamin hasilnya selalu 1; tidak seperti tipe lain, ukuran char tidak bergantung platform.

Operasi Aritmetika pada char #

Karena char sebenarnya adalah integer kecil, kita bisa melakukan operasi aritmetika padanya. Operasi semacam ini berguna untuk mengubah huruf kecil menjadi huruf besar, menghitung selisih antar karakter, atau menghasilkan karakter berikutnya pada alfabet. Yang perlu diingat, setiap operasi pada char secara otomatis dipromosikan menjadi int mengikuti aturan integer promotion, lalu hasilnya ditugaskan kembali ke char.

c
#include <stdio.h>

int main(void) {
    char c = 'a';
    printf("karakter awal : %c\n", c);

    /* Operasi aritmetika pada char: hasilnya berupa int */
    char berikutnya = c + 1;
    printf("karakter +1   : %c (kode %d)\n", berikutnya, berikutnya);

    /* Konversi dari huruf kecil ke huruf besar */
    char besar = c - 32;
    printf("huruf besar   : %c\n", besar);
    return 0;
}

Output yang Dihasilkan:

text
karakter awal : a
karakter +1   : b (kode 98)
huruf besar   : A

Pada baris 9, ekspresi c + 1 mempromosikan c (kode 97) menjadi int, menambahkannya dengan 1, lalu hasil 98 dipotong kembali ke tipe char saat ditugaskan ke berikutnya. Pada baris 13, konversi huruf kecil ke huruf besar dilakukan dengan mengurangi 32 karena selisih kode ASCII antara huruf kecil dan huruf besar adalah 32 (misalnya 'a' = 97, 'A' = 65).

Escape Sequence untuk Karakter Khusus #

Beberapa karakter tidak bisa ditulis langsung di dalam string literal karena akan bentrok dengan sintaks C—misalnya tanda kutip ganda, backslash, atau karakter newline. Untuk menuliskan karakter-karakter ini, C menyediakan escape sequence yang diawali dengan backslash \.

EscapeKarakterKode ASCII
\nnewline10
\ttab9
\rcarriage return13
\\backslash92
\'single quote39
\"double quote34
\0null character0
c
#include <stdio.h>

int main(void) {
    printf("Escape sequences pada C:\n");
    printf("Baris pertama\nBaris kedua\n");
    printf("Tab\ttengah\tteks\n");
    printf("Tanda kutip: \"\n");
    printf("Backslash: \\\n");
    printf("Null char: kode ASCII %d\n", '\0');
    return 0;
}

Output yang Dihasilkan:

text
Escape sequences pada C:
Baris pertama
Baris kedua
Tab     tengah  teks
Tanda kutip: "
Backslash: \
Null char: kode ASCII 0

Pada baris 5, \n di dalam string literal menyebabkan printf memindai output ke baris berikutnya, sehingga teks “Baris kedua” muncul pada baris baru. Pada baris 6, \t menghasilkan karakter tab sehingga teks “tengah” dan “teks” terpisah jarak yang lebih lewat dari spasi biasa. Pada baris 7 dan 8, escape \" dan \\ dibutuhkan karena tanda kutip ganda dan backslash memiliki arti khusus dalam string literal.

char sebagai Byte Mentah #

Banyak API C (misalnya read(), write(), fungsi manipulasi buffer) memakai char atau unsigned char sebagai tipe untuk byte mentah. Dalam konteks ini, nilai char bukan dianggap sebagai karakter melainkan sebagai bilangan 8-bit. Untuk data biner yang nilainya bisa melebihi 127, gunakan unsigned char agar perilaku signed arithmetic tidak mengacaukan hasil. Topik ini akan muncul kembali pada Section file I/O dan pointer.

Dengan pemahaman char sebagai integer 8-bit sekaligus karakter ASCII, kita siap melangkah ke tipe int yang menjadi tulang punggung komputasi bilangan bulat di C.