您的位置:首页 > 编程语言 > C语言/C++

C++Primer笔记(一):C++基本数据类型及其取值范围

2016-06-19 18:10 567 查看
C++的数据类型分类如下:



C++ 语言定义了几种基本类型:布尔型、字符型、整形和浮点型,利用这些基本的数据类型可以构造出相应的复合类型如:数组、指针、结构体、联合体以及枚举类型;同时,C++ 还提供了自定义数据类型的机制,即类类型。void空类型作为一种特殊的类型,没有对应的数值,通常用作无返回值函数的返回类型。C++基本数据类型在内存中存储占用的字节及取值范围如下:



数据类型 在内存中占用的实际位数 与 机器的位数 和 编译器 都有关,具体占用内存的位数 可以通过 sizeof()运算符 得出答案;

/**
* @author:ock
* CentOS release 6.4 (Final):Linux version 2.6.32-358.el6.x86_64()
* GDB :g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
*/
#include <iostream>
int main(){
//内置类型实际占用字节长
std::cout << "sizeof(bool)            is " << sizeof(bool)<<" byte" << std::endl;         // 1  byte
std::cout << "sizeof(char)            is " << sizeof(char)<<" byte" <<std::endl;          // 1  byte
std::cout << "sizeof(wchar_t)         is " << sizeof(wchar_t)<<"      byte" << std::endl; // 4  byte
std::cout << "sizeof(short)           is " << sizeof(short) <<"       byte" << std::endl; // 2  byte
std::cout << "sizeof(int)             is " << sizeof(int) <<" byte" << std::endl;         // 4  byte
std::cout << "sizeof(long)            is " << sizeof(long) <<"        byte" << std::endl; // 8  byte
std::cout << "sizeof(float)           is " << sizeof(float) <<"       byte" << std::endl; // 4  byte
std::cout << "sizeof(double)          is " << sizeof(double) <<"      byte" << std::endl; // 8  byte
std::cout << "sizeof(long double)     is " << sizeof(long double) <<" byte" << std::endl; // 16 byte
std::cout << "sizeof(void*)           is " << sizeof(void*) <<"       byte" << std::endl; // 8  byte
return 0;
}


int、short、long 默认都是有符号的,要获得无符号型需 在类型定义前添加 unsigned;

char 类型分为 sighed char、char、unsighed char三种类型,其中char会根据编译器的不同被编译成sighed char或unsighed char。

指针类型 存储的是所指向的变量的地址,所以 32位机器 占用32位,而64位机器则需要 64位;

C++中把负值赋值给unsigned对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值,如果把 -1 赋值给 8bits 的 unsighed char,那么结果是 255。

浮点型数据在内存中的位数 按照功能分为 符号位+指数位+尾数位,如 32位 的float类型实际有 1bit 符号位 + 8 bits 指数位 + 23 bits 尾数位;指数位决定了 取值范围,尾数位决定了 精度,float的取值范围为 -2^(2^(8-1)) ~ 2^(2^(8-1)), 精度为 2^23 = 8388608 ,一共七位,其中6位可以保证精度。实际中可以使用下面的代码获取精度。

//浮点型 精度
cout << " Number of decimal digits:" << endl;
cout << "float is             " << __FLT_DIG__ << endl;
cout << "double float is      " << __DBL_DIG__ << endl;
cout << "long double is       " << __LDBL_DIG__ << endl;


其中,FLT_DIG等参数配置在 float.h 库文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++