C语言的基本数据类型-学习笔记-4

数据类型

计算机嘛,顾名思义,能计算的机器。计算机之所以能够听歌、看视频、打游戏,因为它能处理各种类型的数据,不同的数据也需要定义不同的数据类型。
还记得我们在定义函数、定义变量、常量的时候,都需要事先声明数据类型嘛,这里我们就要把常见的数据类型说一下。

基本类型

我们将常用的整型数据类型介绍一下。

基本整型(int)

这是最常用的了,还记得main前的那个int嘛?那就是基本整型。

1
2
3
4
5
int a=1
int a=20423
int a=-2222;
//以上都是基本整型
//www.bliner.me 版权所有

注意:基本整型的取值范围是:-2147483648~2147483647之间

短整型(short int)

如果我们用不了基本整型int这么大的范围,可以选择 short int

1
2
3
4
5
short int a=1
short int a=23
short int a=-32222;
//以上都是短整型
//www.bliner.me 版权所有

短整型的取值范围是:-32768~32767之间

长整型(long int)

既然有短整型,就有长整型,长整型最大的作用就是扩大了基本
整型的取值范围:-2147483648~2147483647之间。

1
2
3
4
5
long int a=1
long int a=20423333
long int a=-224422;
//以上都是长整型
//www.bliner.me 版权所有

等等,这不跟上面的基本整型一样嘛?是的…

原因是,在有些编译器中,int只分配了2个字节,其范围是short int,而有些就是long int,大家根据情况来使用,如果确定是大数字,务必使用long int,准没错。

双长整型(long long int)

看到这个总想起long long ago…
好了,回到正题,long long intC99新增的类型,很多编译器还不支持,总之就是拥有比long int还要大的范围就是了,因为long long int 分配8个字节的数据长度。

1
2
3
4
5
long long int a=1
long long int a=20423333
long long int a=-224422;
//以上都是双长整型
//www.bliner.me 版权所有

整型变量的符号属性

因为整型变量是从负数取到正数,如果,我们不需要使用负数的话,我们可以把负数的存储空间挪用给正数使用,即正数的存储空间,在上面介绍的基础上,扩大一倍

1
2
3
4
5
unsigned int a=1
unsigned long int a=20423333
unsigned short int a=224422;
//以上都是无符号数据类型,即正数部分扩大一倍,不能为负数。
//www.bliner.me 版权所有

无符号的数据类型,在输出时用%u进行输出。
备注:%u表示无符号十进制数

字符数据类型

在 C 语言中,字符是按照其数字代码存储的,所以也属于整型的一种,但是字符数据类型比较特殊,我们就拎出来单独说。

字符和字符代码

并不是随便写一个字,C 语言都能认识的,因为 C 语言主要是在英文环境开发设计,所以 C 语言只认识英文环境下所使用的127个字符,他们都是以ASKII码十进制整数的形式存储在内存单元中。
例如:

  • ‘A’的ASKII码是十进制整数65;
  • ‘a’的ASKII码是十进制整数97;

字符变量

字符变量的数据类型是char,也就是英文的 “Character” 字符的缩写。

1
2
3
4
5
6
7
8
#include <stdio.h>
int main(){
char letter='?'; //定义了一个字符类型变量letter,并赋值'?'。
printf("%c \n",letter); //这里使用的是%c输出字符形式
}
/*定义了一个字符变量letter,并且把?赋值给了字符变量c
然后按照输出字符形式输出了letter。*/
//www.bliner.me 版权所有

用%d输出十进制整数
用%c输出字符的形式

如果我们用十进制整数输出上面的字符变量letter,得到的就是?的ASKII十进制码63。
这里需要注意的是,char只能定义一个字符,且该字符在需要在127个常见英文字符内。

浮点型数据

浮点型数据,是用来表示带有小数点的实数
例如:
π的值约等于3.1415926,

  • 可以表示为 $0.31415926 \times 10^{1}$
  • 可以表示为 $0.031415926 \times 10^{2}$
  • 可以表示为 $31.415926 \times 10^{-1}$

小数点是随着指数的变化而浮动的,所以我们称之为浮点,也叫做浮点数

规范化的指数形式

规范化指数形式,必须满足以下两个条件

  1. 小数点前的数字为0
  2. 小数点后的第1位数不为0

例如:3.1415926的规范化指数形式为$ 0.31415926 \times 10^{1} $
为什么要了解规范化指数形式呢?因为在存储小数时,讲按照规范化的指数形存放在存储单元中的。

单精度浮点型(float,6位有效数字)

1
2
float a=0.314
//www.bliner.me 版权所有

编译器为float分配了4个字节,数值以规范化指数形式存储。
4个字节,32位
24位表示小数部分,8位表示指数部分
小数部分占位越大有效数字越多,精度越高
指数部分占位越大,能表示的数值范围越大
单精度浮点型,float ,可以在小数点后呈现6位有效数字
取值范围在$-3.4 \times 10^{38} $ ~ $ 3.4 \times 10^{38}$内取值。

双精度浮点数 (double,15位有效数字)

1
2
double a=0.31415926
//www.bliner.me 版权所有

编译器为double分配了8个字节,数值以规范化指数形式存储。
双精度浮点型,double ,可以在小数点后呈现15位有效数字
取值范围在$-1.7 \times 10^{308} $ ~ $ 1.7 \times 10^{308}$内取值。

在 C 语言中进行浮点计算时,会自动将 float 单精度浮点数转换为 double 双精度浮点数来计算,防止位数不够。

长双精度浮点数(long double,19位有效数字)

1
2
long double a=0.3141592654
//www.bliner.me 版权所有

编译器一般会为long double分配16个字节,数值以规范化指数形式存储。但有些编译器还是会给long double分配8个字节,和double一样,所以这里请注意。
长双精度浮点型,long double ,正常分配16个字节的话,可以在小数点后呈现19位有效数字,取值范围在$-1.1 \times 10^{4932} $ ~ $ 1.1 \times 10^{4932}$内取值。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!