时间:2022-07-13 08:28:47 | 栏目:C代码 | 点击:次
之前说过写代码是为了解决生活中的问题,比如购物。
假设我们要买一本书,它的价格是10.5,是个小数,也可以是一个整数10,它的书名是钢铁是怎样炼成的,是一组字符串,就像svli@gikvw这些,里面每个称为字符。
我们要去用c语言来去存储这些信息呢,在c语言里面为了能够描述这些类型。
就把小数抽象出来一个数据类型,叫浮点型
把整数抽象出来一个数据类型,叫整型(就是上一个博客里面的int)
把字符抽象出来一个数据类型,就叫字符
10.5 - 小数 - 浮点型
10 - 整数 - 整型
A - 字符 - 字符
那么c语言里面抽象出来哪些数据类型呢?
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
//浮点型 10.5
//整型 10
//字符 A
看了上面的数据类型,很容易看出来下面的关系:
为什么叫浮点数?
就像66.6和6.66*10,小数点是可以浮动的,所以叫浮点数
那么,为什么会有上面这么多的类型呢?我们就需要先回答一下下面这个问题:
每一种类型的大小是多少?
我们等一下用代码问一下他们各自的大小
先了解一下新的东西
#include<stdio.h> int main() { printf("%d\n",100)// return 0;}
这个%d指的是打印(输出)的格式,即整型,后面的100是返回值,即打印的是100,\n的意思就像enter,空行的意思,如图:
运行结果:
100
现在来解释一下\n的作用,这里用两组代码来对比一下:
第一组
#include<stdio.h> int main() { printf("%d\n",100)// printf("%d\n",100) printf("%d\n",100) return 0;}
运行的结果:
100
100
100
第二组
#include<stdio.h> int main() { printf("%d",100)// printf("%d",100) printf("%d",100) return 0;}
运行的结果:
100100100
可以看出,\n的作用就是空一行,就是平时enter的作用
接下来就是
#include<stdio.h> int main() { printf("%d ", sizeof(char)); printf("%d ", sizeof(short)); printf("%d ", sizeof(int)); printf("%d ", sizeof(long)); printf("%d ", sizeof(long long)); printf("%d ", sizeof(float)); printf("%d ", sizeof(double)); return 0; }
运行结果:
1 2 4 4 8 4 8
(那么这些数字的含义是什么?它们又是怎么来看出所占内存的大小呢?我们等一会儿就来解释。)
这里的sizeof()的作用就是返回数据类型中的char在内存中所占的大小,通俗点就是用它来告诉你char这个数据类型占多少内存
不过这里用%d不太合适,在一些的编译器里面会报警告,我们用%zu最合适,sizeof的返回值要用%zu来打印。
int main() { printf("%zu\n", sizeof(char)); printf("%zu\n", sizeof(short)); printf("%zu\n", sizeof(int)); printf("%zu\n", sizeof(long)); printf("%zu\n", sizeof(long long)); printf("%zu\n", sizeof(float)); printf("%zu\n", sizeof(double)); return 0; }
结果跟上面那个图是一样的,运行结果是:
1
2
4
4
8
4
8
(我里面加了\n,所以是一排一排的)
接着我们来讲上面那些数字的含义,
你只看到了它们这些数字,但没有单位,其实它们都是有单位的,这里我们就来了解一下计算机的单位:
计算机的单位从大到小就是PB,TB,GB,MB,KB,byte。就像我们平时生活中用的流量,一般开通的套餐只到GB,所以GB,MB,KB这些我们都已经很熟悉了,下面就是各单位间的换算
1Pb=1024Tb
1Tb=1024Gb
1Gb=1024Mb
1Mb=1024kb
1kb=1024byte(字节)
1byte=8bit(比特位)
看到这些,你可能对这些没有什么概念,我们再来进一步了解一下
我们都知道计算机使用的是二进制语言,而我们生活在十进制的世界,
来给一个空间| |,里面可以填1或0就是|1|或|0|,这就是一个bit,对应的就是灯亮和灯灭
那么一个字节byte呢?
|1| |0| |1| |0| |0| |1| |0| |1|占了8个空间,也就是8个bit
10100101 对应的十进制就是 165
一个字节能储存多大的数字呢?
11111111 对应的十进制就是255,即最多可以储存2^8-1这么大的数
我们可以感受到越到后面的单位大小越庞大
解释完计算机的单位,我们就来回到上面的1 2 4 4 8 4 8,它们的单位都是字节
char对应1字节,可以开辟一个能储存2^8-1的空间
short对应2字节,可以开辟一个能储存2^16-1的空间
int对应4字节,可以开辟一个能储存2^32-1的空间
long long对应8字节,可以开辟一个能储存2^64-1的空间
里面的float和double是来存储小数的,双精度浮点数比单精度浮点数精度要高一点,这个在以后的博客会更加深入的去讲解
但是我们看到int和long为什么都是4呢?
C语言规定,sizeof(long)>=sizeof(int)
就行,但不会超过sizeof(long long)
那么我们回到前面提出的问题,为什么要规定这样的数据类型呢,答案是节省空间:
给你一个数2,你要把它存起来,你用了long long这个数据类型,开辟了能储存2^64-1的空间来放这个2,是不是有点大材小用了,用一个char就行了,提高空间的利用率
接下来我们来解释一下下面的代码,来引入下一个博客讲的变量和常量
#include<stdio.h> int main() { int age=18; double weight=16.5; return 0; }
int age=18;
向内存申请一个int大小的空间,来把18这个数据放在age这个变量里面,通俗一点就是,int要了一个房间,起名为age(随便起名),把18放到了里面。
double weight=16.5;
这个像上面一样,double是数据类型,weight是个变量,16.5是个小数
这些数据类型就是来定义变量的