据我所知,1 char = 1 byte = 8 bits(32 位系统)。
char c=0xffff0000; //wrong
那么为什么char
只允许8 位以及文件中的每个字符也是8 位长度。
谢谢。
不。根据定义,char 的 sizeof 是 1。但这并不意味着它总是占用 32 位/8 位。
$3.9.1/1-“声明为字符 (char) 的对象应足够大以存储实现的基本字符集的任何成员。”
字节是 8 位似乎令人困惑。然而,C++ 标准并没有强制要求这样做。
这是标准 $1.7/1 中定义字节的方式
C++ 内存模型中的基本存储单元是字节。一个字节至少大到足以包含基本执行字符集的任何成员,并且由连续的位序列组成,其数量是实现定义的。
很明显,一个字节不必总是 8 位。
仅仅因为系统被归类为“32 位”并不意味着它使用 32 位字节。
一个字节通常被定义为(以系统相关的方式)作为最小的可寻址内存块,并且对于许多仍然是 8 位的架构,即使架构(如 x86 或 x86-64)能够处理更大的数量寄存器中的数据(分别为 32 和 64)。如果您有这种想法,您经常使用“八位字节”这个词来谈论 8 位数量,因为“字节”的含义会随着所讨论的体系结构而变化。
相反,对于某些人来说,“一个字节”被定义为始终是 8 位,但是问题中的混淆可能永远不会发生,因为他们不希望char
在例如 32 位系统上是 32 位。
当然,将系统分类为“ n位”的整个想法过于简单化了很多东西。
在 C 中,您总是可以#include <limits.h>
然后使用宏来获取编译器目标数据类型CHAR_BIT
中的位数。char
char 始终是一个字节,并且大小始终为 1。
一个字节总是至少有 8 位,但在某些系统上可以有更多。
32 位系统指的是地址总线的大小,在 C 或 C++ 中,您可以将其视为指针的大小,而不是字节的大小。
char 有CHAR_BIT
位 [来自#include <climits>
]
在 80x86 机器上,我一直将其视为 8 位。
在 TMS320C54x 和 TMS320C55x DSP 上,我认为它是 16 位的。这很痛苦,因为为了节省内存,字符串必须在每个字符中包含两个 ASCII 字符!
总是,sizeof(char) == 1
char
通常为 8 位(一个字节/八位字节)中的位数。确切的数字在标题中定义<climits>
为CHAR_BIT
。
1 字节 = 8 位
一个字节肯定不是 32 位。无论您使用什么系统,一个字节始终是 8 位。
“32 位”系统意味着“字”大小为 32 位。换句话说,数据以 32 位块在系统中传输。
除了已经提出的要点 - 请注意,sizeof(char)
字符的大小并不总是相同的。
多字节字符集每个字符可以占用 > 1 个字节 - 例如,Unicode 字符总是占用超过一个字节 ( sizeof(wchar_t)
)。
有关此主题的 Microsoft 文档在此处。更令人困惑的是,某些字符集甚至不为每个字符使用固定数量的字节。