【问题标题】:What is int8_t if a machine has > 8 bits per byte?如果机器每个字节有 > 8 位,那么 int8_t 是什么?
【发布时间】:2011-12-14 18:05:54
【问题描述】:

我正在阅读C++ FAQ,上面写着

C++ 语言保证一个字节必须始终至少有 8 位

那么这对<cstdint> 类型意味着什么?

附带问题 - 如果我想要一个字节数组,我应该使用 int8_t 还是 char,为什么?

【问题讨论】:

  • 从技术上讲,这是一个 C 问题,因为类型参考了 C 标准(第 7.18 节)。

标签: c++ c++11


【解决方案1】:

C++(以及 C)将intX_t(即精确宽度的整数类型)类型定义定义为可选。因此,如果没有正好 8 位宽的可寻址单元,它就不会存在。

如果您想要一个字节数组,您应该使用char,因为sizeof char(以及signed charunsigned char)被明确定义为始终为1 个字节。

【讨论】:

  • 等等,如果我没记错的话 sizeof char 被定义为 1,但标准没有指定它是 1 字节还是其他的东西
  • 我到底如何处理不同大小字节的系统之间的 IO?或者我什至不应该尝试?
  • @Dave:XML 是一种流行的选择。
  • @Dave:通常情况下,你不会,因为现在绝大多数计算机都使用 8 位字节。
  • 根据计算机体系结构,一个字节可能包含 8 位或更多位,确切的数字记录在 CHAR_BIT 中。所以 char 并不总是 8 位
【解决方案2】:

添加到 Cat Plus Plus 已经说过的内容(类型是 可选),您可以使用以下内容测试它是否存在:

#ifdef INT8_MAX
//  type int8_t exists.
#endif

或更可能:

#ifndef INT8_MAX
#error Machines with bytes that don't have 8 bits aren't supported
#endif

【讨论】:

  • 编译器可以定义int8_t并在机器不是每字节8位的情况下在软件中进行计算。
  • 我不确定。我认为 int8_t 应该是基本整数类型之一的 typedef。但我不确定。在具有 9 位 1 的补码的机器(某些 Unisys)上,这样的实现会非常慢。
  • @JamesKanze,这正是您应该尽可能使用“本机”类型的原因。
  • @vonbrand 这正是我的论点。整数值的默认类型是int。其他任何东西都应该只在特殊情况下使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
相关资源
最近更新 更多