由于c++里面有很多和c语言很像的东西,这里就来总结一点不像的或者要注意的,或者是我已经快忘记的;
先来一个浮点型也就是实型类型的总结;
知道浮点型有这两个类型:float和double型;
然后float型占四个字节,精度为7位有效数字(注意有效数字不只是小数点后面的,是整个数有多少位),double占八个字节精度为15~16位有效数字;然后我心血来潮地用这两个类型来输出3.1415926以显示它们的区别;但是
#include<iostream>
using namespace std;
int main()
{
float f1 = 3.1415926;
double f2= 3.1415926;
cout << f1 << endl << f2 << endl;
system("pause");
return 0;
}
后来知道,原来一般情况下,输出一个小数只会输出六位有效数字,不管哪种类型QAQ;
还有一点要注意的是:
默认情况下,编译器将小数当作双精度类型,也就是精度更高的double类型;所以在定义一个float型变量给它赋值小数的时候,这时候,那个小数其实是双精度,编译器会先将它转换为单精度类型再进行赋值操作(不同类型的是不可以赋值的);所以这里有一个小技巧同时也是为了看懂这个句子:
float f=3.12f;
不会吧不会吧不会有人会认为这里的f是同一个f吧,不会还有人差点要把它约掉吧,(说的就是自己);其实这里就是定义一个变量名为f的float变量给他赋值3.12;这个小数后面加了个f指的是编译器刚开始就将它当作了单精度,从而不需要在定义的时候多一步转换;(然后我又试了一下,会不会在小数的后面加一个d就是直接认为单精度呢?然后就报错了,现在想想也是,刚开始编译器就已经把小数当作双精度类型了,还要转换什么吗?);
然后还了解一个科学计数法:
在c语言里面
有时候由于一个数太大或者太小很麻烦,这时候如果这个数里面有这样的特点就可以用科学计数法:
某个数后面有很多个连续的零,小数点后面有很多连续的零:形如:
1230000000;
0.000004;
这时候就可以用科学计数法写成1.23e9;2e-6;也就是在e后面为正的话e后面几个零就相当于10的几次方,而为负的话就是相当于0.1的几次方,但是在一定限度下,计算机打印会自动将科学计数法转换为正常的形式,但是如果超过一定限度,就会直接显示(如果是正数就还会再加一个加号),只不过还可以正常加减,但是这在超过一定限度连正常加减都不可以了(其实不是不可以,只是显示错误,好像和位运算什么的有关,暂时不深入);
下面可以验证:
#include<iostream>
using namespace std;
int main()
{
float f1 = 3e-6;
float f2 = 3e-5;
double f3 = 3e-5;
double f4 = 3e-6;
float f5 = 3e-4;
double f6 = 3e-4;
cout << f1 <<endl<<f1+1<< endl<<f2<<endl << f2+1<< endl;
cout << f3 << endl << f3 + 1 << endl << f4<< endl << f4 + 1 << endl;
cout << f5 << endl << f5 + 1 << endl << f6 << endl << f6 + 1 << endl;
system("pause");
return 0;
}
结果是这样的:
可以发现在科学计数法里面
然后再来看正数:也就是把刚刚的代码的负号去掉
这就很那个只打印六个有效数字一样,而之所以超过了那个限度,但是又没有到double的限度为什么不能计算出正确答案,好像涉及一个比较深入的知识(打印的时候位转换),这里我只是想提醒一下自己 ;如果这个是正的话,可以用整型,范围可能比这个要大一点:最大可以弄到它的最大范围;(虽然有时候整型打印也会出现打印的字节地方出错,但是这里没有问题);
然后再来复习一下字符类型:
字符类型char,占用一个节点,且字符型变量并不是将字符本身放进内存,而是将其对应的ASCII码放进内存,当然,还有转换等后续操作;字符型变量用单引号;在ASCII码中0~31给了控制字符,32~126才给课可以显示的字符;还有就是两个要记得:a的ASCII码是97,A是65;
再来介绍几个比较重要的转义字符:
//这个表示注释;也就是可以让编译器忽略它后面的一整行
\\这个表示斜杠在c和c++里面想要打印斜杠,只用一个是会报错的,也就是说,编程里面,编译器看见一个斜杠就会开始之后要有转义字符出现了,像\n是换行,但是单个n只是一个字母,这里\n在c++里面的作用和endl类似,都是换行,但是输出的方式不一样;所以可以把单个斜杠认为一个信号,所以要输出斜杠的话,在变成里面就应该用两个,这时候我就想到了这个:
也就是说,在编译器的认知,我只是向输出一个斜杠一个引号也就是/“ 而且还少打一个引号用来输出,还是看代码更好理解;
也就是说在中文里面,除了字符,其他符号想要正常输出,都要加一个斜杠 ;
然后就是一些换行符:这里换行符的作用和endl(虽然我这个也不是很明白,先只浅浅了解一下)一样,只是方式不一样:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "hello\n";
cout << "hello" << endl;
cout << "hello";
system("pause");
return 0;
}
还有一个水平制表符\t;之前都只知道它可以让格式变整齐,现在才知道其实它是这样的原理:
对于数字数字或者字符都认定为8的倍数为一个整体,剩余的都用空格来添上,这样不仅可以尽量使数据变得很整齐,还可以让我们想输出一组数,又懒得打空格的时候方便使用:
#include<iostream>
#include<string>
using namespace std;
int main()
{
cout << "hello\t123456\tfsfsfsfssf\t"<<endl;
cout << "hello434\teqefec\tdfsfs\t"<<endl;
system("pause");
return 0;
}
这里来浅浅解释一下这个,刚开始hello是5个地方,所以剩下三个空格打印出来到它后面,123456占6个地方后面还有两个地方但因为空格,然后fsfsfsfssf占了十个地方,这时候八个已经不能满足它了,所以扩充为16个,剩下6个地方打印为空格,这里后面因为没有了,所以不明显;下面的就懒得分析了。。。
这里再介绍一个类型string,字符串型,也就是每次要用这个之前记得加上头文件#include<string>这里它的位置没有特别要求,可以放在#include<iostream>下面也可以是上面,在using namespace std;上面下面都可以;当然这里说的随便还是要符合正常头文件放的位置;然后就是它的应用实例:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s = "hello";
cout << s << endl;
system("pause");
return 0;
}
正常打印出来了;
别在年轻的时候, 吃得最胖,活得最懒,爱得最傻, 一生中最好的年轻, 都是一晃而过的,愿你能用心享受它。