字大小混乱

时间:2010-11-24 12:30:46

标签: c++ char byte bit

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

char c=0xffff0000;  //wrong

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

感谢。

8 个答案:

答案 0 :(得分:16)

没有。 char的大小是定义1.但这并不意味着它总是占用32位/ 8位。

  

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

似乎有一个字节是8位的混淆。但是,C ++标准并未强制要求这样做。

以下是标准$ 1.7 / 1

中字节的定义方式
  

C中的基本存储单元   + +内存模型是字节。一个字节至少足以容纳   基本执行的任何成员   字符集,由一个   连续的比特序列,   数量是   实现定义

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

答案 1 :(得分:4)

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

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

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

当然,将系统分类为“ n -bit”的整个想法过于简单化了。

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:2)

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

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

始终sizeof(char) == 1

答案 4 :(得分:1)

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

答案 5 :(得分:0)

1字节= 8位

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

除了已经提出的要点之外 - 请注意sizeof(char)和角色的大小并不总是相同。

多字节字符集可以采用&gt;每个字符1个字节 - 例如,Unicode字符总是占用多个字节(sizeof(wchar_t))。

关于此主题的Microsoft文档是here。为了增加混淆,一些字符集甚至不为每个字符使用固定数量的字节。