类型支持
Fundamental types - cppreference.com
Fixed width integer types (since C++11) - cppreference.com
(stdint.h) - C++ Reference (cplusplus.com)
std::printf, std::fprintf, std::sprintf, std::snprintf - cppreference.com
基础类型
C++ 语言标准定义了基础类型的尺寸的最小值,同时 C++ 语言标准还保证:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
对于指针类型的尺寸,在32位和64位程序中的典型值分别是 4 字节和 8 字节。
建议:如何选择类型
- 当明确知晓数值不可能为负时,选用无符号类型。
- 使用 int 执行整数运算。
- 在算术表达式中不要使用 char 或 bool ,只有在存放字符或布尔值时才使用它们。
- 执行浮点数运算选用 double ,这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度还快。long double提供的精度在一般情况下是没有必要的,况且它带来的运行时消耗也不容忽视。
定宽整数类型
定宽整数类型,是确定大小的整数类型。
定宽整数类型与基础类型相比,能更清楚地描述类型的性质。例如,int类型可能是16位、32位或64位,但是int32_t类型一定是32位。
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main()
{
uint32_t sale = 0;
scanf("%" SCNu32, &sale);
printf("sale = %" PRIu32 "
", sale);
printf("UINT32_MAX = %#" PRIx32 "
", UINT32_MAX);
return 0;
}