เป็นหนึ่งใน C99 เสมอส่วน 6.5.3.4:
เมื่อนำไปใช้กับตัวถูกดำเนินการที่มีประเภท char, char ที่ไม่ได้ลงนามหรือ char ที่ลงนาม (หรือเวอร์ชันที่มีคุณสมบัติเหมาะสม) ผลลัพธ์คือ 1
แก้ไข: ไม่ใช่ส่วนหนึ่งของคำถามของคุณ แต่เพื่อความสนใจจาก Harbison and Steele, 3rd ed (ก่อน c99) น. 148:
หน่วยเก็บข้อมูลถูกนำไปเป็นจำนวนหน่วยเก็บข้อมูลที่ครอบครองโดยหนึ่งอักขระ ขนาดของวัตถุประเภทchar
จึงเท่ากับ 1
แก้ไข: ในคำตอบสำหรับคำถามที่อัปเดตของคุณคำถามและคำตอบต่อไปนี้จาก Harbison และ Steele มีความเกี่ยวข้อง (อ้างแล้ว, เช่น 4 ของ Ch.6):
อนุญาตให้มีการใช้งาน C ประเภทchar
ใดบ้างที่สามารถแสดงค่าตั้งแต่ -2,147,483,648 ถึง 2,147,483,647 ถ้าเป็นเช่นนั้นสิ่งที่จะอยู่sizeof(char)
ภายใต้การนำไปใช้นั้น? ช่วงที่เล็กที่สุดและใหญ่ที่สุดint
คืออะไร?
คำตอบ (อ้างแล้วหน้า 382):
มันจะได้รับอนุญาต (ถ้าสิ้นเปลือง) สำหรับการดำเนินงานที่จะใช้ 32 char
บิตเพื่อเป็นตัวแทนของประเภท โดยไม่คำนึงถึงการนำไปใช้ค่าของ
sizeof(char)
จะเป็น 1 เสมอ
แม้ว่าสิ่งนี้จะไม่ได้กล่าวถึงกรณีที่เฉพาะเจาะจง แต่ไบต์คือ 8 บิตและchar
เป็น 4 ไบต์เหล่านั้น (เป็นไปไม่ได้จริง ๆ กับนิยาม c99 ดูด้านล่าง) ความจริงที่sizeof(char) = 1
ชัดเจนจากมาตรฐาน c99 และ Harbison และ Steele เสมอ
แก้ไข: ในความเป็นจริง (นี้ในการตอบสนองต่อ UPD 2 คำถามของคุณ) เท่าที่ c99 เป็นห่วงsizeof(char)
เป็นไบต์จากส่วน 6.5.3.4 อีกครั้ง:
ตัวดำเนินการ sizeof ให้ขนาด (เป็นไบต์) ของตัวถูกดำเนินการ
ดังนั้นเมื่อรวมกับใบเสนอราคาด้านบนไบต์ 8 บิตและchar
4 ไบต์เหล่านั้นจึงเป็นไปไม่ได้: สำหรับ c99 a ไบต์จะเหมือนกับ a char
.
ในคำตอบของคุณเกี่ยวกับความเป็นไปได้ของ 7 bit char
: เป็นไปไม่ได้ใน c99 ตามมาตรา 5.2.4.2.1 ของมาตรฐานขั้นต่ำคือ 8:
ค่าที่กำหนดการนำไปใช้งานจะต้องมีขนาดเท่ากันหรือมากกว่า [เน้นของฉัน] ตามขนาดที่แสดงโดยมีเครื่องหมายเดียวกัน
- จำนวนบิตสำหรับวัตถุที่เล็กที่สุดที่ไม่ใช่บิตฟิลด์ (ไบต์)
**CHAR_BIT 8**
- ค่าต่ำสุดสำหรับวัตถุประเภทถ่านที่เซ็นชื่อ
**SCHAR_MIN -127
- ค่าสูงสุดสำหรับวัตถุประเภทถ่านที่เซ็นชื่อ
**SCHAR_MAX +127
- ค่าสูงสุดสำหรับวัตถุประเภทถ่านที่ไม่ได้ลงชื่อ
**UCHAR_MAX 255
- ค่าต่ำสุดสำหรับวัตถุประเภทถ่าน
**CHAR_MIN** see below
- ค่าสูงสุดสำหรับวัตถุประเภทถ่าน
**CHAR_MAX** see below
[... ]
หากค่าของอ็อบเจ็กต์ประเภท char ถูกถือว่าเป็นจำนวนเต็มที่มีลายเซ็นเมื่อใช้ในนิพจน์ค่าของ CHAR_MIN จะเหมือนกับของ SCHAR_MIN และค่าของ CHAR_MAX จะเท่ากับของ SCHAR_MAX มิฉะนั้นค่าของ CHAR_MIN จะเป็น 0 และค่าของ CHAR_MAX จะเหมือนกับของ UCHAR_MAX ค่า UCHAR_MAX จะเท่ากับ 2 ^ CHAR_BIT - 1