数据类型
浮点型:float,double
整型:short,long,int,char(char以字符编码保存,他们也是数字)
char
字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看来A(ASCII码)和数字65完全一样
需要注意的点
1.字符串会被当做数组来读取,这个数组是由一个个的字符组成
2.字符串会存在结束字符'\0',也就是null
3.字符的索引值是从0开始的
4.单引号一般表示单个字符,双引号一般表示字符串
数组中如何定义字符串?
char test[][80] = array('test');
第一个[]中不写入是因为编译器知道列表项的个数,而第二个[80]是因为每个字符串的长度都不一样,为了存储最大的长度的字符串,所以分配了80(这个是按照需要定的)个字符
int
保存一个整数,通常使用int,不同计算机中int的大小不同,至少应该有16位
short
保存一个一百几千的数字,可以节省空间,一般是int的一半大小
long
大小是int的两倍,可以保存几十亿以内的数字,大部分计算机的long和int一样大,因为在这些计算机中int本身就很大
float
保存浮点数的基本数据类型
double
保存精确的浮点数。double比float多占一倍空间,可以保存更大,更精确的数字
超过数据类型范围的数据它会如何存储?
#include <stdio.h>
int main()
{
int num = 100000;
short t = num;
printf("最终数据是:%d", t);
return 0;
}
最终输出结果为:-31072
为什么最后存储的是负数?
数字以二进制保存,二进制的100000看起来是这样的:0001 1000 0110 1010 0000;当计算机想保存这个值到shrot的时候,发现只能保存两个字节,所以只保存了数字右半边:1000 0110 1010 0000;最高位是1的二级制有符号数会被当成负数处理,他等价于下面的十进制数:-31072
如下代码运行结果是什么?为什么?
#include <stdio.h>
int main()
{
int x = 7;
int y = 2;
float z = x/y;
printf("最后的结果是:%f\n", z);
float a = (float) x/y;
printf("最后的结果是:%f\n", a);
}
运行结果为:最后的结果是:3.000000;最后的结果是:3.500000
第一个输出位置z的值;由于x和y都是整型所以最后得到一个舍入的整数
第二个输出位置a的值;由于对x进行了类型转换;编译器就会自动将结果替换成浮点数的表示方式
数据类型的临界值
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main()
{
printf("int最大值是:%i\n", INT_MAX);
printf("int最小值是:%i\n", INT_MIN);
printf("int占用的字节大小:%lu bytes\n", sizeof(int));
printf("float最大值是:%f\n", FLT_MAX);
printf("float最小值是:%.50f\n", FLT_MIN);
printf("float占用的字节大小:%lu bytes\n", sizeof(float));
printf("char最大值是:%d\n", CHAR_MAX);
printf("char最小值是:%d\n", CHAR_MIN);
printf("char占用的字节大小:%lu bytes\n", sizeof(char));
printf("signed char最大值:%d\n",SCHAR_MAX);
printf("signed char最小值:%d\n",SCHAR_MIN);
printf("unsigned char最大值:%u\n",UCHAR_MAX);
printf("double最大值是:%f\n", DBL_MAX);
printf("double最小值是:%.5f\n", DBL_MIN);
printf("double占用的字节大小:%lu bytes\n", sizeof(double));
printf("short最大值是:%d\n", SHRT_MAX);
printf("short最小值是:%d\n", SHRT_MIN);
printf("short占用的字节大小:%lu bytes\n", sizeof(short));
printf("long最大值是:%ld\n", LONG_MAX);
printf("long最小值是:%ld\n", LONG_MIN);
printf("long占用的字节大小:%lu bytes\n", sizeof(long));
return 0;
}
32位,64位到底是什么含义?
它既可以表示CPU指令的长度,也可以表示CPU一次从存储器读取数据的大小,实际上,位数是计算机能够处理的数值长度