C++Primer笔记(一):C++基本数据类型及其取值范围
2016-06-19 18:10
567 查看
C++的数据类型分类如下:
C++ 语言定义了几种基本类型:布尔型、字符型、整形和浮点型,利用这些基本的数据类型可以构造出相应的复合类型如:数组、指针、结构体、联合体以及枚举类型;同时,C++ 还提供了自定义数据类型的机制,即类类型。void空类型作为一种特殊的类型,没有对应的数值,通常用作无返回值函数的返回类型。C++基本数据类型在内存中存储占用的字节及取值范围如下:
数据类型 在内存中占用的实际位数 与 机器的位数 和 编译器 都有关,具体占用内存的位数 可以通过 sizeof()运算符 得出答案;
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位可以保证精度。实际中可以使用下面的代码获取精度。
其中,FLT_DIG等参数配置在 float.h 库文件中。
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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性