
文章插图
存储数据的变量面向对象编程OOP的本质是设计自己的数据类型,如果利用正确的数据结构,这对特定的项目解决起来事半功倍,在创建自己的数据结构之前,我们先了解C++内置的数据类型 。内置的数据类型分为基本数据类型和复合类型 。
1.整型变量 程序都要存储信息--》比如班级同学的成绩,今天的天气,恒生电子股票的价格等 。为把信息存储在计算机中,程序必须记录三个基本属性:信息存储在哪?具体的数值是多少?信息的类型是什么?面对这些问题,这里我们只需要声明定义一个变量就可以了:
int moneyConut = 5;宁一般在家私房钱需要找个安静的地方存放,在C++中就利用变量存储宁想保存的数据 。
1.1 变量名 我们使用变量时,名字时需要考虑的重点,如果只是 int a,b,c;那么一个稍微大一点的程序,可阅读性就会很差 。因为不知道这些变量存放的是什么数据 。如果变量表示出差旅费,应将其命名为cost_of_trip或者costOfTrip 。但是变量名也应该遵循C++的规则,就像宁给儿子取名一样 。大致上有三点:名字只能由数字、字母、下划线组成,名字的第一个字符不能是数字,不能使用C++关键字作名字 。
有时一个单词组成的名字往往不够表达意义,通常的做法是用下划线将单词分开,如my_money;或者从第二个单词开始将每个单词的第一个字母大写 。比如myMoney 。(C程序员喜欢使用下划线,而在JAVA里更倾向于大写的方式) 。
随着对 C++的逐步了解,将发现很多有关前缀命名风格的示例,还有其他更奇异、更违反直觉的风格,采不采用这些风格,完全取决于程序员 。在C++所有主观的风格中,一致性和精确度是最重要的 。根据自己的需要、喜好和个人风格来使用变量名(或必要时,根据雇主的需要、喜好和个人风格来选择变量名) 。
1.2 整型数据存储 整数和浮点数是最常见的数据,也是理解起来最简单的 。整型数据就是没有小数的数据,就像1,-99,0一样 。在数学上,整数没有界限,是负无穷到正无穷的开区间,但是计算机内存是有限的,因此,C++语言只能提供一个整数的部分子集 。
C++基本类型有char、short、int、long和C++新增的long long 。这些数据类型还分有符号和无符号,无符号不能表示负值,(因为最高位不是符号位)在定义变量时数据类型前加上 unsigned就可以表示无符号型数据 。比如--》unsigned int a = 99;C++整型分为short、int、long、和long long 。这些类型通过使用不同数目的位来存储值,最多能够表示四种不同的整数宽度 。如果在所有的系统中,每种类型的宽度都相同,那么使用起来将非常方便 。但是现实没那么简单,没有一种选择能满足所有的计算机设计要求 。
下面说说位和字节:计算机内存由一些叫做位(bit)的基本单元组成 。可以将位看成电子开关,通路就是1,短路就是0 。这就是我们说的二进制,假设我们有8位,那么可以演变出2^8也就是256种不同的数字,(每一位都有两种选择),而16位单元可以表示2^16个数字 。字节(byte)通常指的是8位的内存单元,字节是描述计算机内存量的度量单位,1KB等于1024个字节,1MB等于1024KB 。
整型数据的大小和操作系统有关,在老式的IBM PC机上,int占16位(2个字节),而在Windows XP,Windows 7和其他很多微型计算机中,int 占4个字节 。一般声明的变量都是有符号整型,这意味着在每种类型的取值中,负值和正值几乎相同,比如16位的int取值范围是-32768到+32767 。(上面解释了16位可以表示65536个值) 。下面通过两个方法判断系统整型所占的位数:1--》利用运算符sizeof(),它将返回小括号内的数据长度,单位是字节 。2--》利用climits头文件,其中包含了各种限制的宏定义 。利用这些名称,可以了解整型最大取值 。下面看程序:==>
点击查看代码
如此我们便得到了自己操作系统的整型数据大小:#include <iostream>#include <climits>using namespace std;int main(){ cout << "int 占" << sizeof(short) << "位" << "最大值是" << SHRT_MAX << endl; cout << "short 占" << sizeof(int) << "位" << "最大值是" << INT_MAX << endl; cout << "long 占" << sizeof(long) << "位" << "最大值是" << LONG_MAX << endl;cout << "long long 占" << sizeof(long long) << "位" << "最大值是" << LLONG_MAX << endl;return 0;}
文章插图
个人感觉sizeof好用一点,下面是一些climits头文件中的符号常量:
点击查看
1.3 整型数据初始化 要使用变量,首先要创造变量,对变量初始化 。初始化就是将声明定义合并在一起:int myMoney = 0;或者将变量给另一个变量初始化:int yourMoney = myMoney;C++不常见的几种初始化:int h(1)、int h{1}(C++11特性,需要注意精度丢失,被称为初始化器列表)、int h = {1} 。/*<climits>头文件定义的符号常量--》CHAR_MINchar的最小值SCHAR_MAXsigned char 最大值SCHAR_MINsigned char 最小值UCHAR_MAXunsigned char 最大值SHRT_MAXshort 最大值SHRT_MINshort 最小值USHRT_MAXunsigned short 最大值INT_MAXint 最大值INT_MINint 最小值UINT_MAXunsigned int 最大值UINT_MINunsigned int 最小值LONG_MAXlong最大值LONG_MINlong最小值LLONG_MAXlong long最大值LLONG_MINlong long最小值ULONG_MAXunsigned long 最大值FLT_MANT_DIGfloat 类型的尾数FLT_DIGfloat 类型的最少有效数字位数FLT_MIN_10_EXP带有全部有效数的float类型的负指数的最小值(以10为底)FLT_MAX_10_EXPfloat类型的正指数的最大值(以10为底)FLT_MIN保留全部精度的float类型正数最小值FLT_MAXfloat类型正数最大值*/将大括号初始化器用于单值变量的情形还不多,C++11标准使得这种情形更多了,使用花括号初始化器时,括号内可以不包含任何东西,此时变量值为0 。最好在声明时就给变量赋值,将变量声明赋值分开,可能带来一些意想不到的麻烦:前面我们声明int a;后文:int b = a;此时a的值是不确定的 。(如果是全局变量或者静态变量,值为0;但如果是局部变量,它的值是未知的,这取决于它被创建之前相应内存单元保存的值 。这涉及到虚拟内存图,我们后面再谈 。)
1.4 无符号类型 前面介绍的都是有符号整型,也就是最高位为符号位 。下面介绍无符号类型,其优点是可以增加变量能够存储的最大值,理解起来也很简单,最高位不代表符号位,它的最大值就比有符号多一倍,例如,short表示的范围是-32768到+32767,那么无符号版本的范围就是0到65535 。前面说了使用关键字unsigned修饰无符号类型,这里需要注意--》unsigned x = 9;这个也是对的,因为unsigned 本身是unsigned int的缩写 。下面来看一个有关无符号和有符号整型的经典案例:==》
点击查看代码
我们可以猜猜打印的结果是什么,答案如下:--》#include <iostream>#include <climits>using namespace std;int main(){ short shortMax = SHRT_MAX; unsigned short ushortMax = shortMax;cout << "shortMax=" << shortMax << endl;cout << "ushortMax=" << ushortMax << endl;shortMax++;ushortMax++;cout << "shortMax+1=" << shortMax << endl;cout << "ushortMax+1=" << ushortMax << endl;shortMax = 0; ushortMax = 0;shortMax--;ushortMax--;cout << "shortMax=" << shortMax << endl;cout << "ushortMax=" << ushortMax << endl;return 0;}
文章插图
我们后面还会有数据类型转换的问题,这涉及到整数在计算机的存储方式(二进制) 。也是一个经典的问题 。我们一般在处理硬件内存地址的时候用到unsigned比较多,因为地址没有符号,(还会用到另一个关键字volatile,当然都是后话了) 。
2.字符类型2.1 打印字符 下面介绍另一种类型:char,在实际操作中,不可能光是数字就能解决存储信息的问题,char类型就是专门存储字符而设计的 。编程语言通过使用字母的数值编码实现存储字母,因此char是另一种整型 。它足够长,能够表示目标计算机系统中的所有基本符号,实际上 。很多系统支持的字符都不超过128个,因此用一个字节就可以表示所有的符号 。
最常用的字符集是ACSLL字符集,它其中的每个字符都有对应的编码也就是ASCLL码 。例如:A的编码为65,M的编码为77 。下面简单输出一个字符:--》
点击查看代码
前面我们知道了整型是直接赋具体的数值,字符有点不一样,它用单引号' '来表示 。程序运行时会被阻塞直到从键盘输入一个值并且敲下回车键,如果这里我们输入M,看看运行结果:#include <iostream>using namespace std;int main(){ char ch,ch1;ch1 = 'A';int i = ch1;cout << "请输入一个字符" << endl;cin >> ch;cout << "==============" << endl;cout << i << endl;cout << ch1 << endl;cout.put(ch);return 0;}
文章插图
3.bool类型3.1 bool类型【《C++自学入门》3.基本数据类型-1】 ANSI/ISO C++标准添加了一种名叫bool的新类型 。它的名称来着英国数学家George Boole,是他开发了逻辑律的数学表示法 。在计算中,布尔变量的值只能是true或false 。过去C++和C一样,也没有布尔类型,一般零解释为false,非零解释为true 。现在表示可以这样编写语句:bool is_ready = true;而字面值true和false都可以通过强制转换为int类型,true被转换为1,而fakse被转换为0 。另外,任何数字都可以隐式转换为bool值,任何非零值都被转换为true,而非零被转换为false 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
