据我所知,1 char = 1字节= 8位(32位系统)。
char c=0xffff0000; //wrong
那么为什么char
只允许 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。为了增加混淆,一些字符集甚至不为每个字符使用固定数量的字节。