什么是最小宽度整数类型有用?

时间:2015-01-27 13:21:37

标签: c c99

来自ISO / IEC 9899:

  

7.18.1.2最小宽度整数类型

     

1 typedef名称int_leastN_t指定宽度为at的有符号整数类型   至少N,这样没有较小大小的有符号整数类型至少具有指定的宽度。   因此,int_least32_t表示宽度至少为32位的有符号整数类型。

为什么我应该使用这种类型?

当我决定要为我需要的变量采取什么类型时,我问自己: “它可能携带的最大价值是什么?”

所以我要找到一个答案,检查哪个是最大的2 n 哪个大于那个,并采用匹配的完全整数类型。

所以在这种情况下我也可以使用最小宽度整数类型。 但为什么?正如我已经知道的那样:它永远不会是一个更大的价值。那么为什么要采取有时可以覆盖的东西呢?

我可以想象甚至无效的所有其他情况,即:。

“我的类型至少是......” - implmentation无法知道我将获得的最大(例如)用户输入是什么,因此在编译时调整类型将无济于事。

“我有一个变量,我无法确定它在运行时将保持的值大小。”

- 编译器在编译时如何知道? - >它也找不到拟合字节大小。

那么这些类型的用途是什么?

2 个答案:

答案 0 :(得分:5)

  

那么为什么要采取有时可以覆盖的东西呢?

因为可能并不总是您需要的尺寸。例如,在CHAR_BIT > 8int8_t不可用的系统上,int_least8_t是。

想法不是编译器会猜测你需要多少比特。想法是编译器将始终具有可满足您的大小要求的类型,即使它不能提供确切的大小类型。

答案 1 :(得分:5)

因为您的编译器最了解哪些对您有益。例如,在某些CPU架构上,涉及8或16位类型的计算可能比32位完成的计算要慢得多,因为屏蔽操作数​​和结果的额外指令与其宽度相匹配。

例如,Cray Unicos上的C实现只有8位char类型,其他所有(short,int,long,long long)都是64位。如果强制类型为int16_tint32_t,由于狭窄的商店需要屏蔽,oring和anding,性能会受到严重影响。使用int_least32_t将允许编译器使用本机64位类型。