Itu selalu satu di C99, bagian 6.5.3.4:
Ketika diterapkan ke operand yang memiliki tipe char, unsigned char, atau signed char, (atau versi yang memenuhi syarat) hasilnya adalah 1.
Sunting: bukan bagian dari pertanyaan Anda, tetapi untuk minat dari Harbison and Steele, edisi ke-3. (pra c99) hal. 148:
Unit penyimpanan dianggap sebagai jumlah penyimpanan yang ditempati oleh satu karakter; charOleh karena itu , ukuran objek tipe adalah 1.
Sunting: Sebagai jawaban atas pertanyaan Anda yang diperbarui, pertanyaan dan jawaban berikut dari Harbison dan Steele relevan (ibid, Keluaran 4 dari Bab 6):
Apakah diperbolehkan untuk memiliki implementasi C di mana tipe chardapat mewakili nilai mulai dari -2,147,483,648 hingga 2,147,483,647? Jika ya, apa yang akan terjadi sizeof(char)
dalam penerapan itu? Berapakah rentang tipe terkecil dan terbesar int?
Jawaban (ibid, hlm. 382):
Diijinkan (jika boros) untuk sebuah implementasi menggunakan 32 bit untuk merepresentasikan tipe char. Terlepas dari implementasinya, nilai
sizeof(char)selalu 1.
Meskipun ini tidak secara khusus menangani kasus di mana, katakanlah byte adalah 8 bit dan char4 dari byte tersebut (sebenarnya tidak mungkin dengan definisi c99, lihat di bawah), fakta bahwa sizeof(char) = 1selalu jelas dari standar c99 dan Harbison dan Steele.
Edit: Sebenarnya (ini adalah jawaban terhadap pertanyaan Anda upd 2), sejauh c99 yang bersangkutan sizeof(char) adalah dalam byte, dari bagian 6.5.3.4 lagi:
Operator sizeof menghasilkan ukuran (dalam byte) operannya
jadi dikombinasikan dengan kutipan di atas, byte dari 8 bit dan charsebagai 4 dari byte tersebut tidak mungkin: untuk c99 satu byte sama dengan a char.
Sebagai jawaban atas penyebutan kemungkinan 7 bit char: ini tidak mungkin dilakukan di c99. Menurut bagian 5.2.4.2.1 dari standar, minimum adalah 8:
Nilai-nilai yang ditetapkan implementasinya harus sama atau lebih besar [penekanan saya] dalam besarannya dengan yang ditunjukkan, dengan tanda yang sama.
- jumlah bit untuk objek terkecil yang bukan bit-field (byte)
**CHAR_BIT 8**
- nilai minimum untuk objek bertipe karakter bertanda
**SCHAR_MIN -127
- nilai maksimum untuk objek bertipe karakter bertanda
**SCHAR_MAX +127
- nilai maksimum untuk objek bertipe unsigned char
**UCHAR_MAX 255
- nilai minimum untuk objek bertipe char
**CHAR_MIN** see below
- nilai maksimum untuk objek bertipe char
**CHAR_MAX** see below
[...]
Jika nilai objek bertipe char diperlakukan sebagai bilangan bulat bertanda saat digunakan dalam ekspresi, nilai CHAR_MIN harus sama dengan SCHAR_MIN dan nilai CHAR_MAX harus sama dengan SCHAR_MAX. Jika tidak, nilai CHAR_MIN harus 0 dan nilai CHAR_MAX harus sama dengan UCHAR_MAX. Nilai UCHAR_MAX harus sama dengan 2 ^ CHAR_BIT - 1.