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

用于表示ANSI(C89/90)C中的字节的类型?

如何解决《用于表示ANSI(C89/90)C中的字节的类型?》经验,为你挑选了2个好方法。

是否有标准投诉方法来表示ANSI(C89/90)C中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,这不能保证是这种情况.另外,在C99标准中有stdint.h,但在C99之前使用了什么?

我特别想知道8位和"字节"(sizeof(x)== 1).



1> Alex B..:

char总是一个字节,但它并不总是一个八位字节.字节是存储器的最小可寻址单元(在大多数定义中),八位字节是8位存储器单元.

也就是说,对于所有实现,sizeof(char)始终为1,但是CHAR_BITlimits.h定义了平台的字节大小,并且它并不总是8位.有些平台具有16位和32位字节,因此char将占用更多位,但它仍然是一个字节.由于所需的范围char至少为-127到127(或0到255),因此在所有平台上至少为 8位.

ISO/IEC 9899:TC3

6.5.3.4 sizeof运算符

    ...

    sizeof运算符产生其操作数的大小(以字节单位),该操作数可以是表达式或类型的带括号的名称.[...]

    当应用于具有类型的操作数char,unsigned charsigned char,(或者它们的合格音响编版本)的结果是1.[...]

强调我的.


只要C实现所呈现的**逻辑字节**至少为8位,就C一致性而言,小于8位的物理硬件字节就没有问题.这意味着具有7位硬件字节的机器可以为`char`提供14位逻辑字节并且符合要求,但是所有较大类型都必须占用这些逻辑字节的整数(和对齐)数量(即,你可以除非你包含额外的7位填充(第二个`char`的其余部分),否则没有由3个硬件字节组成的21位整数.
@Chris:byte =内存的最小可寻址单位.我不确定你的问题是什么意思.小于8位字节意味着平台不能与C兼容.
char的要求范围实际上是-127到127(不要忘记某些体系结构曾经使用有符号的幅度或一个补码整数表示)或0到255,具体取决于char是带符号的还是无符号的。8位二进制补码支持-128至127,而不是-127至128。
@theduke,主要是DSP,例如:http://leo.sprossenwanne.at/dsp/Entwicklungsprogramme/Entpack/CC56/DSP/INCLUDE/LIMITS.H

2> Johannes Sch..:

您总是可以在unsigned char中表示一个字节(如果您的意思是8位).它始终至少为8位,所有位都构成该值,因此8位值始终适合它.

如果你想要8位,我也认为你必须使用平台相关的方式.POSIX系统似乎需要支持int8_t.这意味着在POSIX系统上,char(因而是一个字节)总是8位.


是的,c标准文件limits.h要求UCHAR_MAX至少为255,没有填充位并使用纯二进制系统.char必须具有与unsigned char或signed char相同的范围和表示,但仍必须是不同的类型.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有