gpt4 book ai didi

选择最合适的整数大小/范围用于变量

转载 作者:太空狗 更新时间:2023-10-29 17:21:00 25 4
gpt4 key购买 nike

stdint.h在 C99 中为整数大小、类型和范围提供了许多选项 - 太多了我不知道该选择什么!

我知道how to use size_t and ptrdiff_t在适当的时候,我使用固定大小的类型进行存储和传输。我的问题涉及只会存储在主机内存中的值。

例如,图像的结构可能包含这些成员:

struct image {
integer width, height; /* pixel dimensions of the image */
integer bits_per_pixel;
...
};

如果 widthheight 永远不会超过 SHRT_MAX,应该使用 short,还是坚持使用 整数?图像不能有负宽度或负高度,所以使用无符号类型?也许 (u)int_least16_t 是正确的选择?还有别的吗?

如果 bits_per_pixel 永远不会超过 64 的值,请使用 charunsigned charuint8_tint 还是其他?

你会在这个例子中使用什么?为什么?

运行代码的 CPU 架构如何影响选择?即 PPC 或 x86、32 或 64 位。
运行代码的设备如何影响选择?即桌面、电话、控制台。
选择与性能和优化有何关系?

简单来说,我的问题是:如何选择要使用的整数?

最佳答案

我会说:不要太担心这个,它通常是一种过早的优化形式。但我的经验法则是:

  • 使用普通 int若有可能。应该是机器的自然字号。
  • 使用unsigned当您需要明确定义的整数溢出时的类型。
  • 使用(u)intX_t当您需要二进制补码表示时键入。
  • 使用unsigned char对于值为 <= UCHAR_MAX 的大型数组.

注意 <stdint.h> 中的很多类型是可选的,所以你不能依赖它们的存在。 POSIX 让这稍微好一点。

关于选择最合适的整数大小/范围用于变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com