是否有机器,其中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?