是否有机器,其中sizeof(char)!= 1,或者至少是CHAR
是否有机器(或编译器),其中sizeof(char) != 1
?
C99标准是否规定标准合规实现的sizeof(char)
必须是1? 如果是这样,请给我部分号码和引文。
更新:如果我的计算机(CPU)无法寻址字节(最小读取为4字节,对齐),但只有4字节( uint32_t
),本机的编译器可将sizeof(char)
定义为4 ? sizeof(char)
将是1,但char将有32位( CHAR_BIT
宏)
Update2:但sizeof结果不是一个字节! 它是CHAR的大小。 char可以是2个字节,或者(可能)是7位?
Update3:好的。 所有机器都有sizeof(char) == 1
。 但是什么机器有CHAR_BIT > 8
?
在C99第6.5.3.4节中总是有一个:
当应用于具有char,unsigned char或signed char的操作数(或其合格版本)时,结果为1。
编辑:不是你的问题的一部分,但从哈比森和斯蒂尔,第三版的兴趣。 (前c99)页。 148:
存储单位被认为是一个字符占用的存储量; char
类型的对象的大小因此是1。
编辑:在回答你的最新问题时,以下来自Harbison和Steele的问题和答案是相关的(同上,第6章第4节):
是否允许有一个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,一个字节与char
相同。
回答你提到7位char
的可能性:这在c99中是不可能的。 根据该标准的第5.2.4.2.1节,最小值为8:
它们的实现定义的值应该等于或大于[我的重点]与显示的相同或更大,具有相同的符号。
- 不是位域的最小对象的位数(字节)
**CHAR_BIT 8**
- 类型为signed char的对象的最小值
**SCHAR_MIN -127//−(27−1)**
- 类型为signed char的对象的最大值
**SCHAR_MAX +127//27−1**
- 类型为unsigned char的对象的最大值
**UCHAR_MAX 255//28−1**
- char类型的对象的最小值
**CHAR_MIN** see below
- char类型的对象的最大值
**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。
没有机器sizeof(char)
是4.它总是1个字节。 该字节可能包含32位,但就C编译器而言,它是一个字节。 有关更多详细信息,我实际上会指出你在C ++ FAQ 26.6。 该链接覆盖了它的相当好,我相当肯定C ++从C获得了所有这些规则。您还可以查看comp.lang.c FAQ 8.10中的大于8位的字符。
Upd2:但sizeof结果不是字节! 它是CHAR的大小。 char可以是2个字节,或者(可能)是7位?
是的,它是字节。 让我再说一遍。 根据C编译器, sizeof(char)
是1个字节。 通俗地说一个字节(8位)与C编译器调用字节的方式不一定相同。 C字节中的位数取决于您的计算机体系结构。 它也保证至少8。
PDP-10和PDP-11是。
更新:像没有用于PDP-10的C99编译器那样。
据报道,ADI公司的32位SHARC DSP的某些型号的CHAR_BIT = 32,而TMS32F28xx的德州仪器DSP的CHAR_BIT = 16。
更新:对于CHAR_BIT = 9的PDP-10,存在GCC 3.2(在该存档中检查include / limits.h)。
链接地址: http://www.djcxy.com/p/79245.html上一篇: Are there machines, where sizeof(char) != 1, or at least CHAR
下一篇: why is nested OpenMP program is taking more time in executing?