📜  扩展的整数类型(在C / C++中选择正确的整数大小)

📅  最后修改于: 2021-05-26 01:55:38             🧑  作者: Mango

C / C++在其基本整数数据类型(char,short,int,long和long long)上有非常宽松的定义。该语言保证它们可以代表至少一定范围的值,但是任何特定平台(编译器,操作系统,硬件)都可能比该值更大。

一个很好的例子很长。在一台机器上,它可能是32位(C要求的最小值)。另一方面,它是64位。如果您要正好是32位长的整数类型,该怎么办?那就是int32_t的来源:它是您的特定系统具有的恰好32位的任何整数类型的别名。

模板:

intN_t or uintN_t
Where N is width of integer which can be 8, 16, 32, 64
or any other type width supported by the library.
// C++ program to show use of extended integral types
#include 
using namespace std;
  
int main()
{
    uint8_t i;      // i with width of exact 8 bits
  
    // Minimum value represented by unsigned 8 bit is 0
    i = 0;
    cout << "Minimum value of  i\t: "<< (int)i << endl;
  
    // Maximum value represented by unsigned 8 bit is 255
    i = 255;
    cout << "Maximum value of i\t: "<< (int)i << endl;
  
    // Warning: large integer implicitly truncated to
    // unsigned type. It will print any garbage value
    i = 2436;
    cout << "Beyond range value of i\t: " << (int)i << endl;
  
    return 0;
}

输出:

In function 'int main()':
19:7: warning: large integer implicitly truncated to unsigned type [-Woverflow]
     i = 2436;
       ^

Minimum value of  i    : 0
Maximum value of i    : 255
Beyond range value of i    : 132

不同的变化
1.固定宽度的无符号8位整数: uint8_t
这意味着给我一个正好8位的无符号整数。

2.最小宽度无符号8位整数: uint_least8_t
这意味着给我最小类型的无符号int,该类型至少具有8位。针对内存消耗进行了优化。

3.最快的最小宽度无符号8位整数: uint_fast8_t
这意味着给我一个至少8位的无符号整数,这将使我的程序更快。由于对齐方面的考虑,它可能会选择更大的数据类型。优化速度。

因此,可以确保uint8_t恰好是8位宽。 uint_least8_t是保证至少为8位宽的最小整数。 uint_fast8_t是最快的整数,保证至少为8位宽。

因此,扩展整数类型有助于我们编写可移植高效的代码。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”