gpt4 book ai didi

c - 是否有机器,其中 sizeof(char) != 1,或至少 CHAR_BIT > 8?

转载 作者:太空狗 更新时间:2023-10-29 16:15:18 24 4
gpt4 key购买 nike

是否存在机器(或编译器),其中 sizeof(char) != 1

C99 标准 是否规定sizeof(char) 在标准合规性实现中必须正好为 1?如果有,请给我章节编号和引用。

更新:如果我有一台机器 (CPU),它不能寻址字节(最小读取是 4 个字节,对齐的),但只有 4 个字节(uint32_t), 可以为此编译机器将 sizeof(char) 定义为 4? sizeof(char) 将是 1,但 char 将有 32 位 (CHAR_BIT 宏)

更新 2:但是 sizeof 结果不是字节!它是 CHAR 的大小。 char 可以是 2 字节,或者(可能)7 位?

更新3:行。所有机器都有 sizeof(char) == 1。但是什么机器有 CHAR_BIT > 8

最佳答案

在 C99 6.5.3.4 节中始终为 1:

When applied to an operand that hastype char, unsigned char, or signed char, (or a qualified version thereof)the result is 1.

编辑:不是您问题的一部分,但出于对Harbison and Steele's. C: A Reference Manual, Third Edition, Prentice Hall, 1991 的兴趣(c99 之前)p. 148:

A storage unit is taken to be theamount of storage occupied by onecharacter; the size of an object oftype char is therefore 1.

编辑:在回答您更新的问题时,Harbison 和 Steele 的以下问题和答案是相关的(同上,第 6 章的例 4):

Is it allowable to have a Cimplementation in which type char canrepresent values ranging from-2,147,483,648 through 2,147,483,647? If so, what would be sizeof(char)under that implementation? What wouldbe the smallest and largest ranges oftype int?

答案(同上,第 382 页):

It is permitted (if wasteful) for animplementation to use 32 bits torepresent type char. Regardless ofthe implementation, the value ofsizeof(char) is always 1.

虽然这并没有具体解决这样的情况,比如字节是 8 位,char 是其中的 4 个字节(实际上对于 c99 定义是不可能的,见下文), sizeof(char) = 1 在 c99 标准和 Harbison 和 Steele 中总是很清楚。

编辑:实际上(这是对您的 upd 2 问题的回应),就 c99 而言,sizeof(char) 以字节为单位,来自第 6.5 节.3.4 再次:

The sizeof operator yields the size(in bytes) of its operand

结合上面的引文,8 位字节和 char 中的 4 个字节是不可能的:对于 c99,一个字节与 char 相同。

在回答您提到的 7 位 char 的可能性时:这在 c99 中是不可能的。根据标准的第 5.2.4.2.1 节,最小值为 8:

Their implementation-defined values shall be equal or greater [my emphasis] in magnitude to those shown, with the same sign.

— number of bits for smallest object that is not a bit-field (byte)

CHAR_BIT 8

— minimum value for an object of type signed char

SCHAR_MIN -127

— maximum value for an object of type signed char

SCHAR_MAX +127

— maximum value for an object of type unsigned char

UCHAR_MAX 255

— minimum value for an object of type char

CHAR_MIN see below

— maximum value for an object of type char

CHAR_MAX see below

[...]

If the value of an object of type charis treated as a signed integer whenused in an expression, the value ofCHAR_MIN shall be the same as that ofSCHAR_MIN and the value of CHAR_MAXshall be the same as that ofSCHAR_MAX. Otherwise, the value ofCHAR_MIN shall be 0 and the value ofCHAR_MAX shall be the same as that ofUCHAR_MAX. The value UCHAR_MAXshall equal 2CHAR_BIT − 1.

关于c - 是否有机器,其中 sizeof(char) != 1,或至少 CHAR_BIT > 8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2215445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com