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; char
Oleh 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 char
dapat 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 char
4 dari byte tersebut (sebenarnya tidak mungkin dengan definisi c99, lihat di bawah), fakta bahwa sizeof(char) = 1
selalu 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 char
sebagai 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.