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

C99中的 stdint.h为整数大小,类型和范围提供了许多选项 – 这么多我不知道选择什么!

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

例如,图像的结构可能包含以下成员:

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

如果宽度和高度永远不会超过SHRT_MAX,应该使用short还是坚持使用int?图像不能具有负宽度或高度,因此使用无符号类型?也许(你)int_least16_t是正确的选择?别的什么?

如果bits_per_pixel永远不会超过64的值,请使用char,unsigned char,uint8_t,int或其他什么?

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

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

我的问题简单来说就是:你如何选择使用哪个整数?

解决方法

我会说:不要太担心这一点,它往往是一种过早优化的形式.但我的经验法则是:

>尽可能使用plain int.它应该是机器的自然字大小.>当您需要明确定义的整数溢出时,请使用无符号类型.>当需要二进制补码表示时,使用(u)intX_t类型.>对值为< = UCHAR_MAX的大型数组使用unsigned char. 请注意< stdint.h>中的很多类型是可选的,所以你不能依赖它们的存在. POSIX使这稍微好一些.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...