变量(数据)
编程的本质实际上就是操纵数据,任何种类的数据。我们想对数据进行修改、读取、写入,我们将数据放在一个叫做变量的东西,他可以允许我们对数据命名。
我们需要利用数据、存放数据。当我们创造一个变量时,他被存放在两个地方“堆”和“栈”(再挖个坑)在物理意义上我们的数据存放在内存之中,数据有不同的类型解决不同数据如:123、-456、abc、2.3、-5.5
数据类型有最基本的数据类型,每个基本数据类型有各自的特点和功能。
但是,其基本变量之前的差距就是大小,在内存中占据多少大小。
int var;我们传统上定义int为4字节数据类型,这取决于编译器的不同。
int var = 15;我们可以将变量var赋值为5,那么这个赋值数据有没有范围呢?
有的,范围从-21亿到+21亿,当大于这个范围时我们就要重新选择数据类型防止溢出。
为什么有正负号、为什么是21亿呢?
首先,int是一个有符号的整数,其占据4字节,每个字节8bit一位置我们有32bits存储0/1,我们需要拿出最高位表示符号的正负。那么就有31位表示数据大小,2的31次方也就是2147483648,所以具体的范围实际上是-2147483648到+2147483648。
如果说你不想要负数,那么有没有方法呢?有那就是关键字unsigned
unsigned int var = 15;表示一个无符号的整数,意味着32位都用来存放数据位,所以2的32次方4294967296,那么其可赋值的范围就是0到4294967296
基本的数据类型
char (1字节)
short(2字节)
int (4字节)
long(4字节)->不同编译器不同有的8字节
其中char有些特殊,你可以给他赋值字符
char a = ‘A’;那么我们打印出的就是字符A,如果
int a = ‘A’;那么我们打印出的就是数字65,在ASCII码中65与A相对应。所以我们也可以
char a = 65;那么我们打印出的依旧是字符A。
为什么要字符是数字,数字是字符?
作为程序员我们当然希望输出的可以是字母,所以我们定义char输出字母。那为什么对char类型变量输入数字也输出字母呢?原因是电脑是机器只认识数据且只认识0和1,那么怎么让机器认识字母呢,定义了ASCII表将字母与数字对应,只要在数字打上char字符类型就说明这个不是数字了,需要变成根据ASCII表将其变成字母。
数据类型间区别就是大小!!!
存储小数我们就要用到
float(4字节)double(8字节)
float var = 5.5
double var = 6.6
如果只是这样写5.5与6.6都是双精度数据(double)类型占8个字节,所以
float var = 5.5f
才是占据4字节的数据。
最原始的数据类型是bool,(1字节)其值只有0和除0以外的数分别代表False和True。
非零都是真。
那么你可能想问如果只表示真假用1 和0即可为什么还占据1字节(8bit)而不是1bit?
两个方面,一是当我们对bool var=888判断时其占据的位数超出1bit。
二是,我们进行寻址操作时(找到bool的内容)只能进行字节寻址,不能进行位寻址,我们只能访问字节,所以不可以单独设立位存贮1bit数据。但是我们可以在一个字节内存放8个bool变量,这样他们还是占据1个字节,表示8个不同的bool值。
函数
函数就是我们编写的代码块,用来执行某些操作。
函数存在的意义是什么?
当我们需要多次且重复执行某个任务时,反复地粘贴会让代码看起来吵人眼睛,并且会有细小的变量名出现错误。总的来说就是简化代码,避免重复。所以,我们将其写为函数多次调用来让代码变得好看,便于维护。
函数通常有一个或多个输入,有一个输出。
#include <iostream>
int Multiply(int a, int b)
{
return a*b;
}
int mian()
{
int ver = Multiply(5, 2);
std::cout<< ver <<std::endl;
}
我们构造ab相乘的函数,并将其打印。如果我们想打印多个乘法时会是以下现象
#include <iostream>
int Multiply(int a, int b)
{
return a*b;
}
int mian()
{
int ver0 = Multiply(5, 2);
std::cout<< ver0 <<std::endl;
int ver1 = Multiply(8, 5);
std::cout<< ver1 <<std::endl;
int ver2 = Multiply(3, 6);
std::cout<< ver2 <<std::endl;
int ver3 = Multiply(5, 9);
std::cout<< ver3 <<std::endl;
}
我们计算了四个乘法并将其打印,我们注意到多个乘法我们不仅仅是改变 Multiply函数中ab的值,我们创建了四个ver0123。当我们将5*2这个代码块复制时很容易忘记改变变量名这个事情,尤其是在不同文件下,维护起来就更加麻烦。
所以对于这个种“多次、重复、有规律性”代码块,我们将其写为一个函数。
#include <iostream>
int Multiply(int a, int b)
{
return a*b;
}
void MultiplyAndLog(int a, int b)
{
int ver = Multiply(int a, int b)
std::cout<< ver <<std::endl;
}
int mian()
{
MultiplyAndLog(5,2);
MultiplyAndLog(8,5);
MultiplyAndLog(3,6;
MultiplyAndLog(5,9);
}
两相对比就能看出函数存在的意义了。
可能有同学问为什么Multiply函数前用int、MultiplyAndLog函数前用void?
首先int类型函数需要有返回值,也就是要用return返回点什么东西。默认为0,或者其他函数值又或者以上的算式。void类型函数就说明MultiplyAndLog函数什么都不返回,执行就可以了。
那么,为什么main函数那么特殊int类型却没看见return呢?
答案就在谜面上,因为他特殊,他是主函数,为了简洁化虽然不用返回值但是默认最后一行有一串return 0;
当然我们也可以改成void main()都可以,随便你。
当写一个项目时,我们通常将函数定义放在其<>文件,调用头文件达到进一步的简化项目的目的。
标签:函数,int,数据类型,笔记,C++,Multiply,自学,我们,字节 From: https://blog.csdn.net/weixin_64418869/article/details/140575468