3

据我所知,1 char = 1 byte = 8 bits(32 位系统)。

char c=0xffff0000;  //wrong

那么为什么char只允许8 位以及文件中的每个字符也是8 位长度。

谢谢。

4

8 回答 8

21

不。根据定义,char 的 sizeof 是 1。但这并不意味着它总是占用 32 位/8 位。

$3.9.1/1-“声明为字符 (char) 的对象应足够大以存储实现的基本字符集的任何成员。”

字节是 8 位似乎令人困惑。然而,C++ 标准并没有强制要求这样做。

这是标准 $1.7/1 中定义字节的方式

C++ 内存模型中的基本存储单元是字节。一个字节至少大到足以包含基本执行字符集的任何成员,并且由连续的位序列组成,其数量是实现定义的

很明显,一个字节不必总是 8 位。

于 2010-11-24T12:34:37.223 回答
4

仅仅因为系统被归类为“32 位”并不意味着它使用 32 位字节。

一个字节通常被定义为(以系统相关的方式)作为最小的可寻址内存块,并且对于许多仍然是 8 位的架构,即使架构(如 x86 或 x86-64)能够处理更大的数量寄存器中的数据(分别为 32 和 64)。如果您有这种想法,您经常使用“八位字节”这个词来谈论 8 位数量,因为“字节”的含义会随着所讨论的体系结构而变化。

相反,对于某些人来说,“一个字节”被定义为始终是 8 位,但是问题中的混淆可能永远不会发生,因为他们不希望char在例如 32 位系统上是 32 位。

当然,将系统分类为“ n位”的整个想法过于简单化了很多东西。

在 C 中,您总是可以#include <limits.h>然后使用宏来获取编译器目标数据类型CHAR_BIT中的位数。char

于 2010-11-24T12:38:27.707 回答
2

char 始终是一个字节,并且大小始终为 1。

一个字节总是至少有 8 位,但在某些系统上可以有更多。

32 位系统指的是地址总线的大小,在 C 或 C++ 中,您可以将其视为指针的大小,而不是字节的大小。

于 2010-11-24T12:40:37.130 回答
2

char 有CHAR_BIT位 [来自#include <climits>]

在 80x86 机器上,我一直将其视为 8 位。
在 TMS320C54x 和 TMS320C55x DSP 上,我认为它是 16 位的。这很痛苦,因为为了节省内存,字符串必须在每个字符中包含两个 ASCII 字符!

总是,sizeof(char) == 1

于 2010-11-24T12:45:59.117 回答
1

char通常为 8 位(一个字节/八位字节)中的位数。确切的数字在标题中定义<climits>CHAR_BIT

于 2010-11-24T12:38:41.983 回答
0

1 字节 = 8 位

于 2010-11-24T12:33:49.813 回答
0

一个字节肯定不是 32 位。无论您使用什么系统,一个字节始终是 8 位。

“32 位”系统意味着“字”大小为 32 位。换句话说,数据以 32 位块在系统中传输。

于 2010-11-24T12:37:00.407 回答
0

除了已经提出的要点 - 请注意,sizeof(char)字符的大小并不总是相同的。

多字节字符集每个字符可以占用 > 1 个字节 - 例如,Unicode 字符总是占用超过一个字节 ( sizeof(wchar_t))。

有关此主题的 Microsoft 文档在此处。更令人困惑的是,某些字符集甚至不为每个字符使用固定数量的字节。

于 2010-11-24T12:39:06.677 回答