初识C语言三

(3)数据类型

认识一下C语言中的数据类型:

char                                          字符数据类型

short                                          短整型

int                                               整形

long                                           长整形

long  long                                   更长的整形(C99这一标准提出)

float                                            单精度浮点数

double                                         双精度浮点数

(双精度比单精度的精度高一些,也就是说小数点后的位数表示能更多一些,精确一些)

在C语言中整数也叫整形,小数又叫浮点数,(那么C语言又是如何表示这些类型的呢?)

解释下:

如char类型

在写代码的时候,任何一个代码都是从main函数(主函数)开始

int main(){
             char ch='A';
             return 0;
}

 在C语言中式如何表示一个字符呢?

用单引号引起一个字符,如:'A';(这就是char这种类型的一种基本用法。)

如果我们要把一个字型存起来的话,又该如何去存呢?

在【'A';】中要将其存储起来的话,那么就需要一个空间来存储,那这时就得向计算机内存申请一块空间来存放。(比如我们要把一本书放回书架中,而这时我们就需要书架。)

如何申请呢?

char——字符类型

我们用这种字符类型创建一个变量ch,这个ch就是向内存申请一块的空间,这个空间的名字就是ch,所以字符'A';就放在ch这块空间里。(char  ch)

#include<stdio.h>
int main(){
             char ch='A';
             printf("%c\n",ch);
             return 0;
}

【注:%c——打印字符格式的数据。】【“\n”——表示换行。】

以上代码中,printf("%c\n",ch);——这是C语言语法本身的一种形式。

意思是我以字符的形式打印ch。

以上就是char的使用形式,如若理解,其他也相似用法。

在举例,如果我们要表达一个整形的意思,如年龄写法为  int  age=20;

即:

#include<stdio.h>
int main(){
             int age=20;
             printf("%d\n",age);
             return 0;
}

【注:%d——打印整形十进制数据】

所以C语言代码中,数据类型是用来向内存申请空间来创建变量的。

疑问:既然有整形了,那为什么还有短整型呢?

short——短整型【其规正写法:short  int】

int——整形

有了int,为什么还会有short int呢?

相关的long是长整形,long long更长的整形又有什么意义呢?

从表面意思理解的话,short比int短,long比int长,long long 比long长。

如:

#include<stdio.h>
int main(){
             long num=100;
             printf("%d\n",num);
             return 0;
}

其实,在调试结果中屏幕显示的内容是一样的,都是整形;真正有区别的是在空间上的差异

在举例:

浮点数——

#include<stdio.h>
int main(){
             double d=3.14;
             printf("%lf\n",d);
             return 0;
}

【注:在这里可以用“%f”来表示,但不规范,建议用“%lf”。】 

#include<stdio.h>
int main(){
             float f=5.0;
             printf("%f\n",f);
             return 0;
}

【注:在调试窗口上小数点后面的数有6个0表示,如输入3.14,则会显示3.140000;若5.0,则为5.000000;但如果超出,则会以编译器提供的最终结果显示。】

扩展:(不同类型打印出来的数是用百分之几来表示)

%d——打印整形

%c——打印字符

%f——打印浮点数字(即打印小数)

%p——以地址的形式打印

%x——打印十六进制

%lf——打印双精度浮点数

%o——打印八进制

.......

(了解即可,基本不会用到)

回到最初的问题上为什么会出现整形、短整型、长整形呢?

一个整形有多个写法,有什么意义?单/双精度浮点数也一样?
1.不同的数据类型所表示的数值范围不同

2.对应数值类型会减少内存消耗

3.所占的内存空间不同

提一点:

通过不同类型来创建变量,而创建变量是向内存申请空间;那么,所申请的是多大的空间呢?

这里我们通过sizeof函数来计算。

#include<stdio.h>
int main(){
             printf("%d\n",sizeof());
             return 0;
}

若在sizeof()括号中输入(char)或(int)表示这些数据向内存申请多大的空间。

sizeof——......的大小

其结果:

sizeof(char)——1

sizeof(short)——2

sizeof(int)——4

sizeof(long)——4\8

sizeof(long long)——8

sizeof(float)——4

sizeof(double)——8

这里空间单位是字节(byte)

扩充:
计算机中单位 : 

bit——比特

byte——字节

kb

mb

gb

tb

pb

...

计算机最小的单位是bit(比特位)。

原理:
计算机是由硬件组成,而硬件是要通电的,又因电有正电和负电之分,且电信号在计算机中要转换为数字信号,所以正电转换为“1”;负电转换为“0”。

计算机能识别电信号,同样的也能识别“1”和“0”的指令;那既然计算机能识别这些“0”“1”指令,所以就需要将它们存储起来。

那如何存呢?

假设计算机要存一个二进制位“1”,就要为“1”开辟一块空间(只能存“1”),而这空间大小就被称作一个比特位。

一个比特位只能存放一个“1”或“0”。(即一个二进制位)

扩展:
什么是二进制?

进制这一概念在生活中运用最多的是十进制。

十进制——0、1、2、3、4、5、6、7、8、9

二进制——0、1

八进制——0、1、2、3、4、5、6、7

......

生活中还有12进制(比如时间是以12小时为一个周期)

7进制(比如:一星期为7天,之后在时一个周期,如此反复)

生活中任何一个数字(如:123、321、231......)都是由十进制组成的。

十进制这些数字(0、1、2、3、4、5、6、7、8、9)如果组合在一起。能够产生一些十进制的数、以及更大的数。

二进制里面所有数字都是由0、1组成的。

比特位用来存放二进制位,且是一对一存放。

一个字节等于8个比特位。(规定好的)

能够存放8个比特位的空间叫一个字节。

再往下:
1kb=1024byte

1mb=1024kb

1gb=1024mb

1tb=1024gb

1pb=1024tb

十进制的运算:逢十进一

如:7+8=15

因为15>10,就进1且在十进制范围内,所以15是由1和5组成的。

123是十进制数字,然是怎么组成的?

1(百位)2(十位)3(个位)     

所以其算法为:1×10²+2×10¹+3×10º=123

二进制的运算:逢二进一

0000000000000000               

                                                 +1

0000000000000001 

                                                 +1                   

0000000000000010

                                                 +1

0000000000000011

                                                   +1 

0000000000000100

(因为二进制只有“0”“1”两位,所以加1后,其结果是余0进一)

.......

如此反复,其最终结果为全1

1111111111111111

再推论:假设有3个比特位,那么就有

000、001、010、011、100、101、110、111——2³种可能

再假设16个比特位存放的二进制数,就有2的16次方可能。(十进制后有2的16次方种数字)

这里就涉及到二进制转换十进制的算法了。

如:010——二进制位

转换十进制就为:0×2²+1×2¹+0×2º=0+2+0+2

以此类推,每一个按照这样算法算下去的二进制序列都可以算作一个数字。

所以,有多少中可能的二进制数就能表达同样可能的数字。

类似的:
int——4byte——32bit

可能有2的32次方种不同排列(递进有规则的)或数字。

而int所能表示的数字最小(min)为0;最大(max)为2的32次方减1

在观察会发现          2的32次方>2的16次方

所以,int表示数字的范围比short大。

回到最初的问题上——一个整形会有长短之分呢?(类似的同样)

举例:如果我们想要表示一个人的年龄——如:age=20;

那这个20是否可能是2000000或20000000呢?(在计算机中理解方式是不一样的)

明显不可能。

这时,就要给age一个范围——int age;而int是整形,且int——4个byte=32bit;因此,所表示数字就很大了。

用超大的空间来存放age的话,就明显浪费了。

所以在int前加上short——short int(短整型)

short——2byte=16bit

所表示数字最大值为2的16次方-1=65535(也还好)

这样的话用short比用int来表示age来说更加合理,更加节省空间。【相较而言,能用最少的空间来表达是更好的】

所以,这就是我们每一种数据类型为什么细化的原因。

【注:存放这么多1的类型,其实是为了更加丰富的表达生活中各种值。】

最后归纳一点为——节省内存空间。

回顾:

short  age=20;//这里我们知道short类型是向内存申请2个字节=16bit的空间,并命名为age,用来存放20这个数字。

但有个新问题:

float   weight=95.6;(95.6f)//这里是向内存申请4个字节,用来存放小数。

但这种写法会出现一种问题,有时候在编译的时候会出现一些警告。

按Ctrl+Fn+F7或F7快捷键,会出现从“double”到“float”截断,什么意思呢?

这是因为写出95.6这样的类型,编译器会默认会是double类型的,而要把一个double类型的小数放到float类型里面去,这时会放生精度的丢失。

但是,问题不大。

解决方法是直接在小数后加个“f”即可。(加f则表示为单精度浮点数。)

 

 

【注:但如果去试着打印时会将精度给粗化,即无限接近。(可自己去尝试)】

插曲:

long类型为什么会有4或8个字节呢?

这又涉及到C语言标准这方面的知识了,C语言标准规定sizeof(long)≥sizeof(int)【只要long大于int即可,并不规定大小是几。】

所以,在vs中,long是4byte,而在一些编译器里,long算出来是8byte;而这些是满足条件。

这些取决于平台的不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值