C99, bölüm 6.5.3.4'te her zaman birdir:
Char tipi, unsigned char veya imzalı karaktere (veya bunun nitelikli bir versiyonuna) sahip bir işlenen uygulandığında sonuç 1 olur.
Düzenleme: Sorunuzun bir parçası değil, ancak Harbison ve Steele'den ilgi için, 3. baskı. (öncesi c99) s. 148:
Bir depolama birimi, bir karakterin kapladığı depolama miktarı olarak alınır; türdeki bir nesnenin boyutu char
bu nedenle 1'dir.
Düzenleme: Güncellenen sorunuza yanıt olarak, Harbison ve Steele'den gelen aşağıdaki soru ve cevap konuyla ilgilidir (ibid, Ex. 4, Ch. 6):
Hangi tipin char
-2.147.483.648 ile 2.147.483.647 arasında değişen değerleri temsil edebildiği bir C uygulamasına izin verilebilir mi? Öyleyse, sizeof(char)
bu uygulamanın altında ne olacak ? En küçük ve en büyük tür aralığı ne olabilir int
?
Cevap (ibid, s. 382):
Bir uygulamanın türü temsil etmek için 32 bit kullanmasına izin verilir (gereksiz ise) char
. Uygulamadan bağımsız olarak, değeri
sizeof(char)
her zaman 1'dir.
Bu, baytların 8 bit olduğu ve char
bu baytlardan 4'ü olduğu (c99 tanımıyla aslında imkansız, aşağıya bakın) bir durumu özellikle ele almamakla birlikte, bu gerçeği sizeof(char) = 1
c99 standardından ve Harbison ve Steele'den her zaman açıktır.
Düzenleme: Aslında (bu güncelleme 2 sorunuza yanıt olarak), c99 ile ilgili sizeof(char)
olarak bayt cinsinden, bölüm 6.5.3.4'ten yine:
Sizeof operatörü, işleneninin boyutunu (bayt cinsinden) verir
bu nedenle yukarıdaki alıntıyla birleştirildiğinde, 8 bitlik baytlar ve char
bu baytların 4'ü imkansızdır: c99 için bir bayt a ile aynıdır char
.
7 bit olasılığından bahsetmenize yanıt olarak char
: bu c99'da mümkün değildir. Standardın 5.2.4.2.1 bölümüne göre minimum 8'dir:
Uygulamada tanımlanan değerleri, aynı işaretle gösterilenlere eşit veya daha büyük [vurgu] olacaktır.
- bit alanı olmayan en küçük nesne için bit sayısı (bayt)
**CHAR_BIT 8**
- işaretli karakter türünde bir nesne için minimum değer
**SCHAR_MIN -127
- işaretli karakter türündeki bir nesne için maksimum değer
**SCHAR_MAX +127
- unsigned char türündeki bir nesne için maksimum değer
**UCHAR_MAX 255
- char türünde bir nesne için minimum değer
**CHAR_MIN** see below
- char türünde bir nesne için maksimum değer
**CHAR_MAX** see below
[...]
Char türündeki bir nesnenin değeri, bir ifadede kullanıldığında işaretli bir tamsayı olarak ele alınırsa, CHAR_MIN'in değeri SCHAR_MIN'inki ile aynı olacak ve CHAR_MAX'ın değeri SCHAR_MAX'ınki ile aynı olacaktır. Aksi takdirde, CHAR_MIN değeri 0 olacaktır ve CHAR_MAX değeri UCHAR_MAX'ınki ile aynı olacaktır. UCHAR_MAX değeri 2 ^ CHAR_BIT - 1'e eşit olmalıdır.