当前位置:  开发笔记 > 编程语言 > 正文

char保证恰好是8位长吗?

如何解决《char保证恰好是8位长吗?》经验,为你挑选了4个好方法。

就这样.没有找到任何类似的话题所以请耐心等待.



1> Paul Dixon..:

从ANSI C规范的副本,请参见第3.1.2.5节 - 类型:

声明为char类型的对象足够大,可以存储基本执行字符集的任何成员.如果$ 2.2.1中枚举的所需源字符集的成员存储在char对象中,则其值保证为正.如果其他数量存储在char对象中,则行为是实现定义的:值被视为有符号或非负整数.

第2.2.1节 - 字符集中介绍了"执行字符集"的概念.

换句话说,char必须至少足够大以包含构成基本执行字符集的至少95个不同字符的编码.

现在添加2.2.4.2- 数值限制

符合要求的实施应记录本节规定的所有限制,应在标题和 规定中规定.

整数类型的大小

下面给出的值应替换为适用于#if预处理指令的常量表达式.它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.

最小对象的最大位数,不是位字段(字节)
CHAR_BIT 8

signed char
SCHAR_MIN -127 类型的对象的最小值

signed char
SCHAR_MAX +127 类型的对象的最大值

unsigned char
UCHAR_MAX 255 类型的对象的最大值

....

所以你有它 - char中的位数必须至少为8.


@jweyrich,不完全是 - 不保证括号位数.请参见http://stackoverflow.com/questions/2098149/what-platforms-have-something-other-than-8-bit-char
@ChrisStratton:我认为你误解了我的肯定.一个字节的大小可能因架构而异,但无论如何,`sizeof(char)`都保证为1(字节).该1个字节由`CHAR_BIT`位组成.
"它们的实现定义值应与所示的值相等或更大"......是的,我的意思是至少8位.

2> 小智..:

不,它不能保证是8位.sizeof(char)保证为1,但这并不一定意味着一个8位字节.


参考/解释?可能的解决方案?请 :)

3> dfa..:

no,char数据类型必须至少包含8位(参见ANSI C规范)


确切的报价,好吗?
@Neil:标准确实包含(因此CHAR_BIT),并且说它的内容与C的相同.

4> Bastien Léon..:

C99标准草案说一个字节必须至少为8位宽,因为它包含一个宏CHAR_BIT,它产生每字节的位数,并保证至少为8(§5.2.4.2.1).

C++标准草案包括名称(第18.2.2节)下的C语言.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有