【问题标题】:Is there an actual 8-bit integer data type in C++C++ 中是否有实际的 8 位整数数据类型
【发布时间】:2016-05-16 17:34:49
【问题描述】:

在 c++ 中,特别是 cstdint 头文件中,有一些 8 位整数类型,结果是带有 typedef 的 char 数据类型。谁能建议一个实际的 8 位整数类型?

【问题讨论】:

  • 据我了解,int8_t 保证是一个 8 位整数,如果它被定义的话。您的实现 typedef 是 char(或者可能是 signed char)这一事实意味着您的实现的 char 实际上是 8 位。请注意,char 及其亲属在 C 和 C++ 中始终是整数类型;这与其他一些不将字符视为算术类型的语言不同。
  • 在更常见的实现中,char 是 8 位。如果不是 8 位,则不会有 std::int8_t
  • 可以这样想:char 是字符串字符类型,不应该用于其他任何用途。 unsigned charsigned char 用作算术类型,对字符串字符没有用处。

标签: c++ integer


【解决方案1】:

是的,你是对的。 int8_tuint8_t 在 1 字节为 8 位的平台上是 typedefchar。在没有的平台上,将给出适当的定义。

以下答案基于 char 为 8 bits 的假设

char 包含 1 个字节,根据实现可能是 signedunsigned

所以int8_tsigned charuint8_tunsigned char,但是这样可以安全地使用 int8_t/uint8_t 作为实际的 8 位整数,而不需要过多地依赖实现。

从实现者的角度来看,typedeffing 其中 char 是 8 位是有意义的。

看到这一切,可以安全地使用 int8_tuint8_t 作为真正的 8 位整数。

【讨论】:

  • 请注意,int8_tchar 小于8 位的平台上可能不是char 的类型定义。
  • 不,它们不是 typedefchar。首先,char 类型取决于编译器,可以是unsignedsignedcharint8_tsigned 数量,uint8_t 是无符号数量。它们不能映射到相同的类型。唯一的保证是int8_t 是一个有符号的 8 位整数,uint8_t 是一个 无符号 的 8 位宽整数。
  • @vsoftco char 必须至少为 8 位。它甚至在您提供的链接末尾被调用。
  • 我只想指出,POSIX 规范明确要求CHAR_BIT == 8,因此对于任何符合 POSIX 标准的环境,或者具有这样的传统,那么char 将是 8 位.因此,对于 99% 的典型程序(例如:非嵌入式固件、DSP 等),程序将在 char 为 8 位的环境中运行。
  • “将给出适当的定义”应改为“类型将不存在”
猜你喜欢
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
相关资源
最近更新 更多