基本数据类型:对数据分配存储单元的安排
比如int a=0;就是对a分配了4个字节的存储单元,这个存储单元用来存放整型的数据
一.
1.int(整型)
int 分配4字节 32位
数据范围 上限 2^31-1
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1... |
1个方框代表1位:第一位是符号位,符号位为1表示负数,为0表示正数。所以最大的数就是第一位是0,后面的31位都是1。计算机都是把数据作为二进制数来处理的,方框中的数只能是0,1
把这个值算出来就行,二进制计算方法,位子上的数乘以权,也就是2^0+2^1+2^2+...2^30=2^31-1
(用等比数列求和公式),还有一种方法:因为10000...-1=01111...,这样更直观
下限 -2^31
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0... |
unsigned int:无符号整型,只能是正数,正数能取到的范围更大
short int:短整型 分配2字节
long int:长整型 分配4字节,与int一样,一般不用它,为什么长整型和整型一样呢?整型以前是分配2字节,只是它现在进行了改进
long long int:双长整型 分配8字节
2.浮点型
float 分配4字节
double 分配8字节
float pi=3.1415;这没什么问题,但是会有警告(从“double”到“float”截断),因为计算机会默认把小数看成double类型的,如果非要用float,那就改写成 float pi=3.1415f;
还有不管是float类型去输出,还是double类型去输出,计算机都是保留小数点后六位然后输出
3.字符型
char 分配1字节
可以理解为char只能接受1个字符,一个字符占一个字节
如果写成char ch="abcde",就不对了,想要接受字符串必须要借助字符数组
二.
隐式转换:不需要程序员干预,由计算机自己完成
char--int--float--double 左边的可以隐式转化成右边的
double a=1;这里就是int隐转到了double
int a=1.23;这就不对了,会发生数据溢出
可以把char想象成小杯,int想象成中杯,float想象成大杯,double想象成超大杯
如果把double里面的东西放到int里面,就会有一部分放不进去,这一部分就丢失了
强制转换:就是由程序员操作完成的
格式:(类型名)(表达式)注意括号是不能省的 int a=(int)(1.23),有精度丢失的风险
看下面一段代码:
float a=1.23f;
int b=(int)a;
printf("%f %d",a,b);
得出结论:强制转换是对数据本身操作,变量自身并不会发生改变,a还是float类型,没有变成int类型