为啥 INT_FAST16_MAX 被定义为 INT32_MAX (VS 2015)?

Posted

技术标签:

【中文标题】为啥 INT_FAST16_MAX 被定义为 INT32_MAX (VS 2015)?【英文标题】:Why INT_FAST16_MAX is defined as INT32_MAX (VS 2015)?为什么 INT_FAST16_MAX 被定义为 INT32_MAX (VS 2015)? 【发布时间】:2017-10-26 22:04:45 【问题描述】:

我从 visual studio 2015 打开 "stdint.h" 文件,如下图所示,我注意到 INT_FAST16_MAX 定义为 INT32_MAX。和未签名的一样。为什么会这样?

但最少的定义如预期。 (下)

#define INT_LEAST16_MAX  INT16_MAX
#define UINT_LEAST16_MAX UINT16_MAX

【问题讨论】:

因为 int_fast16_t 和 int32_t 一样? 因为尺寸是实施-#define'd。 为什么不呢?在这个平台上int32_fast_t 恰好与int32_t 相同。没有错。 【参考方案1】:

INT_FAST16_MAX 是可以存储在int_fast16_t 变量中的最大值。

int_fast16_t 保证是最快的 int,大小为至少 16 位。

因为 MSVC 的目标机器具有 32 位通用寄存器,其访问速度比 16 位快,所以int_fast16_t 实际上是一个 32 位整数。因此,INT_FAST16_MAXINT32_MAX

另见:

What's the difference between "int" and "int_fast16_t"?

【讨论】:

以上是关于为啥 INT_FAST16_MAX 被定义为 INT32_MAX (VS 2015)?的主要内容,如果未能解决你的问题,请参考以下文章

TF-tf.arg_max 介绍

intXX_t和int_fastXX_t有什么区别?

Ubuntu 16.04下使用gcc输出汇编的.0文件为可执行文件时出现:`_start'被多次定义

为啥 sgbm 中的视差值可以被 16 整除?

max (Largest elements in array)

043_面向对象_16_修饰变量