计算机是处理数据的,而在C语言中数据是有分类的。
有字符 char
整形 int
短整型 short
长整型 long
长长整型 long long(整个数据类型是在C99提出的)
单精度浮点数 float
双精度浮点数 double
我们创建变量的时候是要注意变量的类型来归类的。我也注意到,主函数的开头是int main(),鹏哥也讲过,由于是int,所以最后要返回一个整型。
按照这个说法,那我把主函数改成short main()也应该可以,当然结果是运行成功了:)
为什么要分这么多种类型呢。一是为了节省空间(符合C语言精神)
二是丰富表达类型(这是我没想到的,也不知道有什么好处)
那么int 和short(其实是 short int)的区别有什么呢,短整型有多短捏。
用打印函数来看他们的大小(此处要用sizeof()函数),最后可以看见,short占据2个字节,int则占据4个字节。
关于字节byte 通常用B表示,他有比特bit有这样的数字关系,1byte=8bit。
1bit其实就是一个二进制数字,他可以是0也可以是1,占据这么一个人为规定的大小。
那么我们用这些2进制的数字来表示数字,short最多可以表示到2^(2*8)=65536,但是由于还有一个0,所以最多只能表示到65535。
按照这个我来进行实验,结果发现short a = 65535;时,打印出来的东西是 -1
尝试一下65536会不会出错,结果打印出来的是 0
按照这个结果来看,如果他是有算负数的话,那最多就只能打印到32767(为什么不是一半呢,我是这么认为的,从实际数0开始算做编号1,那么一到一半的话,就是一半减一)
结果是正确的,当创建变量味32768的时候,打印出来的数字是 -37268
那么为什么65536可以创建然后打印出来的是0呢
根据前面的说法,如果创建65536的话,那应该用16个二进制(2byte)是不行的,然后整型占用空间都是双数,所以我假象是32个二进制(4byte),
那么65536用二进制表示应该是 00000000 00000000 11111111 11111111
而短整型是占据2byte的,那么按照结果来推论,后面的1应该全都被忽略掉了,剩下前面的16个0 ,而它的编号代表的数字也正是0。
接下来到了另一个疑问的地方,整型(int)和长整型(long)占据的大小相同
其实按照标准规定,long的大小只需要>=int即可
在网上查找了会资料,他们的大小主要还是取决于编译器,我对于编译器了解还是很少,所以就暂时不深究下去。
小tip:浮点数的输出符为%f
系统输出的时候默认为双精度浮点数,如果要较为规范的用的话 在创建float变量后应加个f
Eg: float num1 = 10.6f;