2.1 C++ 基本内置类型

C++定义了一套包括算数类型和空类型在内的基本类型,其中算数类型包含了字符、宽字符、整型数、浮点数、布尔值等。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的,当函数不返回任何值时,使用空类型作为返回值。


编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。

您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。


类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed
  • unsigned
  • short
  • long

下表显示了各种变量类型在内存中存储值时需要占用的内存的最小尺寸

类型 最小尺寸
char 1 个字节
unsigned char 1 个字节
signed char 1 个字节
int 2 个字节
unsigned int 2 个字节
signed int 2个字节
short int 2 个字节
unsigned short int 2 个字节
signed short int 2 个字节
long int 4 个字节
signed long int 4 个字节
unsigned long int 4 个字节
long long 8 个字节
float 6位有效数字
double 10位有效数字
long double 10位有效数字
wchar_t 2 或 4 个字节

下面实例会输出您电脑上各种数据类型的大小。

#include <iostream>  
#include <string>  
#include <limits>  
using namespace std;  
  
int main()  
{  
    cout << "type: \t\t" << "************size**************"<< endl;  
    cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);  
    cout << "\t最大值:" << (numeric_limits<bool>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;  
    cout << "char: \t\t" << "所占字节数:" << sizeof(char);  
    cout << "\t最大值:" << (numeric_limits<char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;  
    cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);  
    cout << "\t最大值:" << (numeric_limits<signed char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;  
    cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);  
    cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;  
    cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);  
    cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;  
    cout << "short: \t\t" << "所占字节数:" << sizeof(short);  
    cout << "\t最大值:" << (numeric_limits<short>::max)();  
    cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;  
    cout << "int: \t\t" << "所占字节数:" << sizeof(int);  
    cout << "\t最大值:" << (numeric_limits<int>::max)();  
    cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;  
    cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);  
    cout << "\t最大值:" << (numeric_limits<unsigned>::max)();  
    cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;  
    cout << "long: \t\t" << "所占字节数:" << sizeof(long);  
    cout << "\t最大值:" << (numeric_limits<long>::max)();  
    cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;  
    cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);  
    cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();  
    cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;  
    cout << "double: \t" << "所占字节数:" << sizeof(double);  
    cout << "\t最大值:" << (numeric_limits<double>::max)();  
    cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;  
    cout << "long double: \t" << "所占字节数:" << sizeof(long double);  
    cout << "\t最大值:" << (numeric_limits<long double>::max)();  
    cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;  
    cout << "float: \t\t" << "所占字节数:" << sizeof(float);  
    cout << "\t最大值:" << (numeric_limits<float>::max)();  
    cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;  
    cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);  
    cout << "\t最大值:" << (numeric_limits<size_t>::max)();  
    cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;  
    cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;    
    cout << "type: \t\t" << "************size**************"<< endl;  
    return 0;  
}

当上面的代码被编译和执行时,它会产生以下的结果,结果会根据所使用的计算机而有所不同:

type:         ************size**************
bool:         所占字节数:1    最大值:1        最小值:0
char:         所占字节数:1    最大值:        最小值:?
signed char:     所占字节数:1    最大值:        最小值:?
unsigned char:     所占字节数:1    最大值:?        最小值:
wchar_t:     所占字节数:4    最大值:2147483647        最小值:-2147483648
short:         所占字节数:2    最大值:32767        最小值:-32768
int:         所占字节数:4    最大值:2147483647    最小值:-2147483648
unsigned:     所占字节数:4    最大值:4294967295    最小值:0
long:         所占字节数:8    最大值:9223372036854775807    最小值:-9223372036854775808
unsigned long:     所占字节数:8    最大值:18446744073709551615    最小值:0
double:     所占字节数:8    最大值:1.79769e+308    最小值:2.22507e-308
long double:     所占字节数:16    最大值:1.18973e+4932    最小值:3.3621e-4932
float:         所占字节数:4    最大值:3.40282e+38    最小值:1.17549e-38
size_t:     所占字节数:8    最大值:18446744073709551615    最小值:0
string:     所占字节数:24
type:         ************size**************

 其中char 、unsigned char 、signed char 的值没有显示出来,是由于打印时的类型有问题,需要强制转换成(int),打印结果如下:

type: 		************size**************
bool: 		所占字节数:1	最大值:1		最小值:0
char: 		所占字节数:1	最大值:127		最小值:-128
signed char: 	所占字节数:1	最大值:127		最小值:-128
unsigned char: 	所占字节数:1	最大值:255		最小值:0
wchar_t: 	所占字节数:4	最大值:2147483647		最小值:-2147483648
short: 		所占字节数:2	最大值:32767		最小值:-32768
int: 		所占字节数:4	最大值:2147483647	最小值:-2147483648
unsigned: 	所占字节数:4	最大值:4294967295	最小值:0
long: 		所占字节数:8	最大值:9223372036854775807	最小值:-9223372036854775808
unsigned long: 	所占字节数:8	最大值:18446744073709551615	最小值:0
double: 	所占字节数:8	最大值:1.79769e+308	最小值:2.22507e-308
long double: 	所占字节数:16	最大值:1.18973e+4932	最小值:3.3621e-4932
float: 		所占字节数:4	最大值:3.40282e+38	最小值:1.17549e-38
size_t: 	所占字节数:8	最大值:18446744073709551615	最小值:0
string: 	所占字节数:32
type: 		************size**************

 

猜你喜欢

转载自blog.csdn.net/hanzefeng/article/details/81395561
2.1
今日推荐