戳一戳!和我一起走进C++的世界

导读

C++是信息学中非常重要的一门课程,也是绝大多数学生入门信息学、参加信息学竞赛所必备的一门编程语言。


掌握C++,不仅可以让孩子对电脑、编程有更加深刻的认识,也能将学习信息学的方法应用到其他学科领域,特别是能够促进孩子对数学逻辑的理解。


本篇文章中,我们一起来回顾一下数据的范围,总结所有的数据类型,并完成课后小练习吧!



1 数据范围问题

1 引入


如果我们不考虑有X的情况,我们使用我们之前学过的整数变量来存一下我们的身份证号。


为保证隐私性,我们创建一个身份证号,创建的要符合身份证号的规范:


前1、2位数字表示:所在省(直辖市、自治区)的代码;
第3、4位数字表示:所在地级市(自治州)的代码;
第5、6位数字表示:所在区(县、自治县、县级市)的代码;
第7—14位数字表示:出生年、月、日;(年4位,月2位,日2位)
第15、16位数字表示:所在地的派出所的代码;
第17位数字表示性别:奇数表示男性,偶数表示女性;
第18位数字是校检码:也有的说是个人信息码,不是随计算机的随机产生,它是用来检验身份证的正确性。


根据规范,我们创建一个人的身份证号如下:


130727199703073432


我们使用int类型来保存,并输出:


#include<iostream>
using namespace std;

int main(){
int a = 130727199703073432;
cout<<a<<endl;

return 0;
}


警告如下:


[Warning] overflow in implicit constant conversion [-Woverflow]


执行结果如下:


C++总结 | 13 数据范围与数据类型_数据类型


我们发现,输出的和我们存的不一样。这是因为,保存的数据,超出了int类型的最大值。

2 数据范围扩充

为了解决上面的问题,C++中又有了如下几种类型:


unsigned int:无符号整型,可以简写为unsigned
short int:短整型,可以简写为short
long int:长整形,可以简写为long
long long:超长整型,也叫长长整形


其中unsigned也可以用作前缀,后面我们会详细讲。


每种类型能够存储的数据范围如下:


C++总结 | 13 数据范围与数据类型_数据_02


具体为什么能这几种类型的数据范围是这样,在这里,我们不做过多的说明,我们以后讲到计算机的编码,还会详细讲解。


我们发现,long long类型可以存放19位整数,而身份证号只有18位,所以我们可以使用long long类型来存身份证号:


#include<iostream>
using namespace std;
int main(){
long long a = 130727199703073432;
cout<<a<<endl;

return 0;
}


执行结果如下:


C++总结 | 13 数据范围与数据类型_数据_03


除了整数,小数也有一个类型double可以存比float更大的数据,这两种类型可以统称为:浮点型,它们具体的名字分别是:


单精度浮点型:float
双精度浮点型:double


它们能存的范围如下:


C++总结 | 13 数据范围与数据类型_c++_04


2 数据类型总结

1 总述

我们最开始学了四种基础结构,这四种基础结构及其对应的类型如下:


int:整型
float:浮点数
char:字符型
string:字符串型


这四种结构是我们最常用的,一般来说,这四种结构能解决我们大部分的问题。但是我们还需要更多的结构实现更多的功能。


不过,不管什么类型,定义变量都是一样的:


[数据类型] [变量名] (= [初值]); //括号表示可以不用在定义的时候赋初值


下面就让我们总结一下我们能用到的所有的类型吧!

2 unsigned 前缀

我们前面说的int类型,是可以存储负数的,C++中提供了一个前缀:unsigned,用来强调:我们定义的类型只能是非负的


一般来说,unsigned只给整数类型当前缀

对于非数据类型,例如char类型,意义不大;

对于浮点数类型,它们不支持unsigned前缀。

3 整数相关类型

整数的类型比较多。有下面几个:


int 
unsigned int
short int
unsigned short
long int
unsigned long
long long
unsigned long long


注意:

一般来说,int能够满足我们日常定义整型变量需求

如果int不行,直接使用long long

如果明确是非负数,直接使用unsigned long long


4 小数相关类型

小数相关类型一共有两种:


float
double


小数类型也可以保存整数,但是不支持int类型的一些操作。所以如果我们要使用整数,尽量还是定义整数类型。


整数类型可以和小数类型做运算,运算的结果还是小数类型。

5 布尔类型

布尔类型的写法为:bool ,布尔类型是这些类型中值最少的,布尔类型只有两个可取的值: true 和 false :


true:表示正确,C++中默认用1来表示,其他非零数也可以表示,非空字符也可以表示。
false:表示错误,C++中用0来表示


之前我们讲if语句中的条件表达式,它的值就是bool类型。

6 字符与字符串类型

字符就是单个字符,字符串就是多个字符(可以为1个,可以为很多个)。


字符可以利用ASCII码与整数进行转化。具体讲解请看:


​C++总结 | 07 数据类型补充​


注意:

字符串是能保存数据最多的类型,一串字符取出单个字符就是字符类型。


字符串存储的数据多,但是它没有前面那些类型的独特功能。所以我们一般都通过字符分割分割成一个个字符,然后再转化成其他类型进行操作。具体的,我们后面再讲。

3 习题

根据今天讲的内容,完成下面的两道习题。

1 正确编码

有一个编码是11位整数,如果编码满足,前面十位数据加起来之后的数据的个位是编码数的个位,则这个编码就是正确的编码,否则就是错误编码。


现在要求通过键盘输入一个编码,判断这个编码是否为正确编码。

2 简单计算器

写一个简单的计算器能够实现两个数的四则运算,要求两个数据使用double类型。


注意:

除法要判断,分母不能为零。



AI与区块链技术

C++总结 | 13 数据范围与数据类型_c++_05

长按二维码关注