变量是什么:
其实编程的大部分操作都是操作数据,我们在程序中使用任何数据,包括改变他的读写属性,或者是把着数据存储进去,那存储到哪里去呢?就是变量里(在程序运行过程可以变化的量,它是存储数据的容器,需要先定义才能使用)。但我们创建一个变量时,它会被存储在内存中(堆或栈 后面或细致说明内存时怎么工作的),其实不同的变量他们之间最大的区别就是这个变量会占用的时多少的内存(也就是不同数据类型之间的区别)。
举几个例子:
整型:
我们举个例子,我们定义一个int 类型的数据,打印一下他的值(8),一般来说int(整型)是4个字节,但是我们要明白一点数据类型的实际大小他和编译器是有关的。int 存储的数据范围大概是-20亿-+20亿,为什么呢?首先我们要知道1个字节=8位,然后我们都知道整数是有正整数和负整数的,接下来因为1个字节=8位,int是4个字节所以就是32位,然后整数是有符号的,所以要减去一位(31),因为一个bit位是由0 和 1构成的,所以int的范围就是2的31次2^31=2,147,483,648
因为他是有符号的所以它的范围就是(-2,147,483,648------2,147,483,648)
#include <iostream>
int main()
{
int valuable = 8; //-2b-2b
//unsigned int valuable = 8;
std::cout << valuable<< std::endl;
std::cin.get();
}
这时有人说了,那如果我确切的知道我的数据就是正整数没有负数(无符号数),那应该用什么呢?如果用int就浪费了负数的部分,范围也小了很多。那怎么办了!欸,当然有办法那就是加一个unsigned关键字就可以把个32位中的那个符号位去掉了。也就是2^32=4,294,967,296。直接翻一倍。那如果说4个字节的对我来说还是太大了,我只要一个字节的呢?当然也有拉,我们还有非常多的数据类型可以看下面我整理好的。
有符号整型:
类型名 占用内存字节数 取值范围
signed char 1 -128 ~ 127
signed short 2 -32768 ~ 32767
signed int 4 -2147483648 ~ 2147483647
signed long 4|8
signed long long 8 -9223372036854775808 ~ 9223372036854775807
无符号整型:
类型名 占用内存字节数 最大值
unsigned char 1 255
unsigned short 2 65535
unsigned int 4 4294967295
unsigned long 4|8
unsigned long long 8 18446744073709551615
字符型:
char 字符型,字符就是符号或图案,但在计算机中以整数形式存储(使用整数模拟字符),当需要显示时根据ASCII表中的对应关系显出相应的符号或图案。
接下来我们看这个例子就可以非常简易的显示出来
#include <iostream>
int main()
{
unsigned int valuable = 8;
char a = 'A';
std::cout << a << std::endl;
std::cout << valuable << std::endl;
std::cin.get();
}
可以看到运行出来的结果是A那我们如果改成65呢?是吧也是A这是为什么呢?因为传入一个char到cout,cout会把a看作一个字符,而不是数字,你们可以试试如果把char改成short那打印出来就是65而不是A,就算你给short复制A字符他出来的也是65(short a = 'A');
浮点型:
小数点是浮动的,也就是带小数点的数据,采用科学计算数法存储,由符号位+指数域+小数域组成,这种存储格式,运算速度慢、又不太准确,所以尽量少用。
我们看这个例子:
在着代码里,你可能认为自己定义的是一个float类型的valuable数据其实不然,它是一个double类型的,那怎么区分double和float呢?那就是在数字后面追加一个f(不区分大小写)
单精度: float 4
双精度: double 8
高精度: long double 12|16
布尔型:
这个很简单就不给什么例子了,一笔带过了。(注意一点:除了0之外的所有数字都是true)
bool 1字节
true 4字节 实际使用的是整数1
false 4字节 实际使用的是整数0