【问题标题】:What is the byte?什么是字节?
【发布时间】:2019-06-13 23:39:48
【问题描述】:

C 标准在许多不同的地方使用字字节。大多数情况下,它与我对这个词的理解非常相似——8 位长的数据块。

但是:

sizeof 运算符产生其操作数的大小(以字节为单位)

还有:

当 sizeof 应用于 char 类型的操作数时,无符号 char,或signed char,(或其合格版本)结果为1

稍后:

当应用于具有数组类型的操作数时,结果是 数组中的总字节数。

因此,如果我们认为char 的机器具有超过 8 位,则该程序的可观察行为将不同于 8 位字符机器。

char foo[5];

for(size_t index = 0; index < sizeof(foo) / sizeof(char); index++)
{
    /* some code */
}

所以可能C标准理解中的字节含义不同。谁能解释一下:字节是 8 位还是字节是不同的东西

还有一个额外的问题。

sizeof(char) == sizeof(array[0])?考虑字节大小差异

【问题讨论】:

标签: c char language-lawyer sizeof


【解决方案1】:

3.术语、定义和符号

3.6 byte 足够大的可寻址数据存储单元 持有执行的基本字符集的任何成员 环境

注意 1 可以表示每个单独字节的地址 对象的唯一性。

注意 2 字节由连续的位序列组成,数字 其中是实现定义的。最低有效位是 称为低位;最高有效位称为 高位。

这是一个符合 C 标准的字节。它的最小大小只是保存执行环境的基本字符集所需的位数,即现在 IIRC 至少为 8 个。字节的确切大小(以位为单位)在CHAR_BIT 宏中编码。

【讨论】:

  • 幸运的是,C (++) 编译器并不喜欢 CHAR_BIT != 8 ^^
  • 一些 uC 有。我在阅读另一个论坛上的帖子时开始考虑它。
猜你喜欢
  • 2011-03-19
  • 2013-11-09
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多