假设在一个虚拟机器中,char的大小为32位。sizeof(char)会返回什么?
a)4
b)1
c)实现相关
d)机器相关
答案:b
解释:标准并不要求char为8位,但要求sizeof(char)返回1。
sizeof
运算符返回一个类型的大小,以字节为单位。其中,一个字节被定义为 char
的大小。因此,sizeof(char)
始终是1,无论在给定平台上 char
有多少个位。sizeof(char)
、sizeof(signed char)
和 sizeof(unsigned char)
都是1。char
的大小。这应该很容易理解。 - juanchopanza5.3.3 [expr.sizeof]规定:
sizeof操作符返回其操作数的对象表示所占用的字节数。 操作数可以是表达式(未求值的操作数(Clause 5))或带括号的类型标识符。 不得将sizeof操作符应用于具有函数或不完整类型的表达式,枚举类型在所有枚举器声明之前其基础类型未固定,带有此类类型名称的带括号表达式或指代位域的glvalue。sizeof(char), sizeof(signed char)和sizeof(unsigned char)都为1。[...]
以上强调部分为本人添加
因此,无论一个char
占用多少位,它的大小始终为1。
sizeof(char) == 1
,因为sizeof
返回的是以字节为单位的大小。sizeof(x)
返回的是以 char
大小为单位表示的 x
的大小。
没有计算机的sizeof(char)是4。它总是1个字节。该字节可能包含32位,但就C编译器而言,它是一个字节。
"8个比特"的正确名称是八位组。C标准使用“字节”一词表示char大小的对象。其他人可能在不同的情况下使用“字节”这个词,通常是指“八位组”,但在C(和C++或Objective-C)中,它表示“char大小的对象”。Char可能超过8位,或超过一个八位组,但它始终是一个字节。
这个问题应该是——在一个假想的机器中,字长(寄存器大小)
为32位。那么sizeof(char)
会返回什么?
答案是1字节
。
在计算机领域,字是指特定处理器设计所使用的自然数据单位。字是按指令集或处理器硬件处理的一块固定大小的数据单元。字中的位数(字长或字宽)是任何特定处理器设计或计算机体系结构的重要特征。--https://en.wikipedia.org/wiki/Word_%28computer_architecture%29
在您的情况下,字长
将是32位。同时
历史上,字节是用于在计算机中编码单个字符文本的比特数,因此在许多计算机体系结构中,它是最小的可寻址内存单元。--https://en.wikipedia.org/wiki/Byte
1字节是内存中最小可寻址单元,它可以是8位、9位或16位,具体取决于硬件规格。
就sizeof
而言,它首先确定参数的类型,最终计算出以字节为单位的大小。因此,以下两个C++语句将产生相同的结果。
int n;
std::cout<<sizeof(int);
std::cout<<sizeof(n);
char
是32位。这与字或寄存器的大小无关。 - Keith Thompsonchar
是CHAR_BIT
位,其中CHAR_BIT >= 8
。而一个“字”可以由多个字节组成,因此你认为问题应该指定字长的建议并不太合理。 - Keith Thompson
Alt-F2
(命令行弹出),输入例如wp:byte
(回车);实际上是小写。将打开带有给定搜索短语的WP。对于例如gg:byte
或leo:nette sache
也是如此。如果我不得不在Windows上工作,我最想念的事情之一。它实际上被称为“Webshortcuts” /“Web-Kürzel”。 - too honest for this site