数据类型的大小与sizeof(数据类型)之间的差异 我正在学习C++,遇到下面的问题。我只是一个初学者,我感到困惑。函数是否不应该返回数据类型的大小?为什么数据对象的大小可能与其sizeof()不同?我不明白答案的解释

数据类型的大小与sizeof(数据类型)之间的差异 我正在学习C++,遇到下面的问题。我只是一个初学者,我感到困惑。函数是否不应该返回数据类型的大小?为什么数据对象的大小可能与其sizeof()不同?我不明白答案的解释,c++,c,C++,C,假设在一台假设的机器中,字符的大小是32位。sizeof(char)返回多少 a) 四, b) 一, c) 依赖于实现 d) 机器相关 答:b 说明:该标准不要求字符为8位,但要求sizeof(char)返回1。运算符sizeof以字节为单位生成类型的大小,其中字节定义为char的大小。因此,根据定义,sizeof(char)始终为1,而不管给定平台上的char有多少位 这适用于C和C++。 根据C11标准,6.5.3.4 sizeof运算符生成其操作数的大小(以字节为单位),可以是表达式或类

假设在一台假设的机器中,字符的大小是32位。sizeof(char)返回多少

a) 四,

b) 一,

c) 依赖于实现

d) 机器相关

答:b


说明:该标准不要求字符为8位,但要求sizeof(char)返回1。

运算符
sizeof
以字节为单位生成类型的大小,其中字节定义为
char
的大小。因此,根据定义,
sizeof(char)
始终为1,而不管给定平台上的
char
有多少位

这适用于C和C++。


根据C11标准,6.5.3.4

  • sizeof
    运算符生成其操作数的大小(以字节为单位),可以是表达式或类型的括号名称。大小由操作数的类型决定。。。。
  • 那么

  • sizeof
    应用于类型为
    char
    无符号char
    有符号char
    (或其限定版本)的操作数时,结果为1
  • 从C++11标准中,5.3.3

  • sizeof
    运算符生成其操作数的对象表示形式中的字节数。操作数可以是一个表达式,它是一个未赋值的操作数(第5条),也可以是一个带括号的type-id
    sizeof(字符)
    sizeof(有符号字符)
    sizeof(无符号字符)
    为1。

  • (强调矿山)

    根据第5.3.3节[expr.sizeof]

    sizeof运算符生成其操作数的对象表示形式中的字节数。操作数可以是未赋值操作数(第5条)的表达式,也可以是带括号的type-id。sizeof运算符不得应用于具有函数或不完整类型的表达式,也不得应用于枚举 在声明其所有枚举数之前,其基础类型不是固定的类型,可以是此类类型的括号名称,也可以是指定位字段的glvaluesizeof(字符)、sizeof(有符号字符)和sizeof(无符号字符)为1。[…]

    重点矿山


    因此,无论字符占用多少位,它的大小始终是1,如果f(x)返回的是以字符大小为单位的x的大小,你会被字节与八位字节之间的差异所迷惑

    字节是一个字符的大小。这将产生始终为真的
    sizeof(char)==1
    ,因为
    sizeof
    返回字节大小

    八位字节8位组成


    在几乎所有现代平台上,字节的大小恰好与八位字节的大小相同。这就是为什么把它们混在一起是一个常见错误的原因,即使是书籍作者和教授也在这样做

    问题应该是——假设在一台假设机器中,
    字大小(寄存器大小)
    是32位。sizeof(char)返回多少

    答案将是
    1字节

    在计算中,word是一个术语,表示用户使用的自然数据单位 特殊的处理器设计。字是一个固定大小的数据块 由指令集或硬件作为一个单元进行处理 处理器。一个字中的位数(字的大小、字的宽度或长度) 字长)是任何特定处理器的重要特征 设计或计算机架构

    在您的情况下,
    字大小将是32位。也

    从历史上看,字节是用于编码单个字节的位数 计算机中文本的一种字符,因此它是最小的 许多计算机体系结构中的可寻址内存单元

    1字节是内存的最小可寻址单元,它可以是8位、9位或16位,由硬件规格选择

    sizeof
    而言,它首先确定参数的类型,最后计算字节大小。因此,下面两个C++语句将产生相同的结果。
      int n;
      std::cout<<sizeof(int);
      std::cout<<sizeof(n);
    
    intn;
    
    std::cout没有sizeof(char)为4的机器。它总是1字节。该字节可能包含32位,但就C编译器而言,它是一个字节


    “8位”的正确名称是八位字节。C标准使用“byte”一词表示字符大小的对象。其他人可以用不同的方式使用“字节”一词,通常当它们表示“八位字节”时,但在C(和C++中,或者Objto-C)中,它表示“对象的字符大小”。一个字符可能多于8位,或者多于一个八位字节,但它总是一个字节。

    我不明白你的问题。“为什么数据对象的大小可能与其sizeof()不同?”是什么意思?@cad:No,
    char
    定义为1字节。在那个系统中,一个字节是32位。@KennethChen:你们的老师错了。8位的类型是八位字节。字节的宽度取决于机器。只是现在大多数架构都有8位/字节。几十年前,例如9比特是相当普遍的。在某些DSP上,它仍然有24位。@Olaf:学习永远不会变老。大约20年后,我戒掉了这个习惯…;-)@alk:在血浆中:
    Alt-F2
    (弹出命令行),输入例如
    wp:byte
    (输入);它实际上是小写的。将使用给定的搜索短语打开WP。例如,
    gg:byte
    leo:nette sache
    也一样。如果我必须在Windows上工作,我最怀念的事情之一就是。它实际上被称为“Webshortcuts”/