数据是如何存储的?
大家都知道在计算机中都是按照二进制存储的,所以大家常说计算机是由0和1组成的。二生万物!我们可以将计算机的存储器想想成下面这样的一个一个的小格子,每个小格子可以存储1位二进制数。
例如十进制数字145在二进制存储下应为10010001,它在计算机中存储如下所示:

每一个小格子只能有两种状态,要么为0要么为1。这种可以存储1位二进制数的小格子就是计算机中的最小单位,称为一个比特(bit)。 8个比特可以组成一个更大的单位称为字节(Byte) 即∶1字节=8bit
其他计量单位:
1KB=1024Byte 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TB
Copy
不同的数据类型的空间占用:
不同的数据类型在存储器中存储时占用的空间是不同的。下面分别是几种常见的数据类型所占用的空间,数据类型对存储空间的占用是按照字节来计算的,也就是说任何数据类型最少也会占用一个字节的存储空间:

通过上面的表格,我们已经很清楚的了解了每种数据类型所占用的空间了,那么大家能通过每个数据类型占用的空间推算出每种数据类型能够表示的数据范围吗?比如说,对于int类型,它可表示的数据范围是多少?
通过上面,我们发现int类型占用了4个字节,每个字节等于8个比特,因此int类型一共占用4*8=32个字节,每个字节相当于一个小格子,因此int类型最多占用32个小格子,当小格子里面的数字全部为1的时候,即int类型可表示的最大数字。

你是不是觉得这样就对了,其实并不是,因为int还可以存储负数,计算机用32bit中最左边的1位来标识正负数,0为正,1为负。故int类型最大表示范围如下:

因此,int类型的数据范围为:-231 ~231-1 231=2147483648≈2.147*109 因此在我们编程过程中,如果处理的数超过109,就要小心是否会超过int的范围,因为可能会出现数据溢出!

unsigned int无符号整型,无符号在这里的含义是不存在负数,也就是说unsiged类型的变量无法存储负数。
263= 9223372036854775808 ≈9.22*1018 如果整数超过这个范围就需要使用高精度算法了。
例题1:以下变量的定义、运算和赋值是否正确。
int a = 100000; 正确
int b = 2000000000; 正确
int c = 3000000000; 错误∶ 超出int范围
int d = a * a; 错误∶ a*a超出int范围
int e = 1000000000; 正确
int f = b + e; 错误∶ b+e超出了int范围
long long g = 123456789987654321; 正确
long long h = g * 10; 错误
Copy
什么是位运算?
程序中所有数在计算机中都是以二进制的形式存储的。位运算就是直接对整数在内存中的二进制位进行操作。在C++中位