C语言数据类型总结,整形、浮点型、字符型详细讲解


前言

C语言提供了多种数据类型,用于声明不同类型的变量或函数,这些数据类型决定了变量存储占用的空间以及如何解释存储的位模式。C语言的数据类型主要分为以下几类:

基本数据类型:

  • 整型(int):用于存储整数,根据存储大小和符号可以细分为signed int、unsigned int、short int、long int等。
  • 浮点型(float):用于存储单精度浮点数。
  • 双精度浮点型(double):用于存储双精度浮点数,long double提供更大范围和精度
  • 字符型(char):用于存储单个字符,可以是signed char或unsigned char。

枚举类型

  • enum:用于定义一组命名的整型常量

void类型

  • void:特殊的数据类型,用于表示无值,常用于无返回值的函数。

派生类型

  • 数组:用于存储同类型元素的序列。
  • 指针:用于存储变量地址的数据类型。
  • 结构体(struct):用于组合不同类型的数据项。
  • 共用体(union):允许在相同的内存位置存储不同的数据类型。

每种数据类型都有其特定的用途和存储需求,选择合适的数据类型对于程序的效率和准确性至关重要。
下面将详细介绍整形、浮点型、字符型,简单介绍数组,指针,结构体等


变量和常量数据

在程序的指导下,计算机可以做许多事情,如数值计算、名字排序、科学计算、控制机器,甚至绘画等其他你能想到的事情。要完成这些任务,程序需要使用数据,即承载信息的数字和字符。有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量(variable)

如示例程序中,水的质量quality是变量,用户的输入不同,quality的值也就不同
水的密度那就是常量,不管用户输入如何,k一直是1000;

#include <stdio.h>
//已知水的质量,计算水的体积 
int main()
{
	float quality;
	scanf("%f", &quality); //获取水的质量(kg)
	
	float k = 1000.0; //水的密度是10的3次方千克每立方米 
	
	float value = quality / k; //计算水的体积
	printf("%.2f", value);//打印保留两位小数的水的体积的值 
	
	return 0;
}

计算机小常识

位、字节和字
位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。

  • 最小的存储单元是位(bit),可以储存0或1
  • 字节( byte)是常用的计算机存储单位,1字节为8位,这是字节的标准定义。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅用0和1便可表示数字),便可表示(0~255的整数或一组字符。
  • 字( word)是设计计算机时给定的自然存储单位。对于8位的微型计算机(如,最初的苹果机), 1个字长只有8位。从那以后,个人计算机字长增至16位、32位,直到目前的64位。计算机的字长越大,其数据转移越快,允许的内存访问也更多。

那么每类数据类型所占的大小是多少呢,可以借助sizeof()函数来计算(包含在头文件"stdio.h"里),并可以利用printf()函数将值显示出来

	int size_int = sizeof(int);	//4字节 
	int size_short = sizeof(short);	//2字节 
	int size_long = sizeof(long); //4字节 
	int size_long_long = sizeof(long long);	//8字节 	
	int size_float = sizeof(float);	//4字节 
	int size_double = sizeof(double); //8字节 		
	int size_long_double = sizeof(long double);	//16字节 
	int size_char = sizeof(char); //1字节 

一、整形

整形就是数学中的整数,没有小数部分。计算机以二进制数字储存整数,例如,整数7以二进制写是111。因此,要在8位字节中储存该数字,需要把前5位都设置成0,后3位设置成1,如图
在这里插入图片描述

1. int类型

int类型是有符号(signed)整型,即int类型的值必须是整数,可以是正整数、负整数或零。其取值范围依计算机系统而异。一般而言,储存一个int要占用一个机器字长。因此,早期的16位IBM PC兼容机使用16位来储存一个int值,其取值范围(即int值的取值范围)是-32768~32767(1e5,即10的5次方数量级)。目前的个人计算机一般是32位,因此用32位储存一个int值,取值范围是-2147483648-2147483647(1e9,即10的9次方数量级)。一般而言,系统用一个特殊位的值表示有符号整数的正负号。

声明和初始化

C语言在使用的一个变量或前需要声明,即数据类型+变量名;
初始化(initialize)变量就是为变量赋一个初始值。在C语言中,初始化可以直接在声明中完成。只需在变量名后面加上赋值运算符(=)和待赋给变量的值即可。如下所示:

如何声明简单变量
1.选择需要的类型。 2.使用有效的字符给变量起一个变量名。3.按以下格式进行声明: 类型说明符变量名; 类型说明符由一个或多个关键字组成。下面是一些示例:int erest; unsigned short cash;
4.可以同时声明相同类型的多个变量,用逗号分隔各变量名,如下所示;char ch, init, ans;
5.在声明的同时还可以初始化变量:float mass = 6.0E24 ;

int a;
a = 0;
int b =  1;
int c, d;
int c = 1, d = 2;

2. 其他整形

初学C语言时,int类型应该能满足大多数程序的整数类型需求。尽管如此,还应了解一下整型的其他形式。
C语言提供3个附属关键字修饰基本整数类型: short、long和 unsigned。

  • short int类型或者简写为short 占用的存储空间可能比int类型少,常用于较小数值的场合以节省空间。与int类似, short是有符号类型。
  • long int或long 占用的存储空间可能比int多,适用于较大数值的场合。与int类似,long是有符号类型。
  • long long int或long long (C99标准加入) 占用的储存空间可能比 long多,适用于更大数值的场合。该类型至少占64位。与int类似,long long是有符号类型。
  • unsigned int或unsigned只用于非负值的场合。这种类型与有符号类型表示的范围不同。例如,16位unsigned int 允许的取值范围是0-65535,而不是-32768~32767。unsigned将用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。
  • 在C90标准中,添加了unsigned long int或unsigned long和 unsigned int或unsignedshort类型。C99标准又添加了unsigned long long int或unsigned long long
  • 在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图。例如,short、shortint、 signed short、 signed short int都表示同一种类型。

二、浮点型

浮点数就是数学中的小数,C语言中有第一种一般记法和指数记法
在这里插入图片描述
在C语言中,float和double都是用来表示浮点数的数据类型,但它们在存储大小、精度和表示范围上有所不同。

  • float:

    o 是单精度浮点型数据类型。
    o 占用 4个字节(32位)的存储空间。
    o 精度6-7位有效数字。
    o 取值范围大约在 -3.4e+38 到3.4e+38

  • double:

    o 是双精度浮点型数据类型。
    o 占用 8个字节(64位)的存储空间。
    o 精度至少是10位有效数字。
    o 取值范围大约在 -1.79e+308到1.79e+308

由于double类型提供了更高的精度和更大的数值范围,它适用于需要更精确计算的场合。而float类型则占用更少的存储空间,可以用于对精度要求不是特别高的应用。在实际开发中,除非需要处理非常大或非常小的数值,或者需要非常高的数值精度,否则float通常已经足够使用。
需要注意的是,在进行浮点数的运算时,由于计算机内部表示浮点数的方式,可能会出现精度损失的情况。

声明和初始化

float a;
float b , c;
float d = 3.14;
float e = 100; //初始化给的值是整数,但存储时仍存储为浮点数
double a;
double b ,c;
double d = 3.1415926;

三、字符型

在C语言中,字符数据类型主要是通过char关键字来表示的。char类型用于存储单个字符,如字母、数字或其他符号。这些字符都是根据ASCII码(American Standard Code for Information Interchange)来编码的。char类型通常占用 1个字节(8位)的存储空间,可以存储256个不同的值;

1. ASCII码

ASCII码,全称为American Standard Code for Information Interchange(美国信息交换标准代码),是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。ASCII码是最通用的信息交换标准
ASCII码表是一个字符与其对应的数值映射表
在这里插入图片描述

只需要记住数字的起始和英文字母的起始十进制,便可以向下推其他的数字和字符,并要记住大写和小写字母之间相差32

char类型可以分为三种:

  • char:可以存储任何字符,其具体行为(是否有符号)取决于系统;在某些系统中,它可能默认为有符号。
  • signed char:明确指定为有符号,可以表示的范围通常是 -128 到 127。
  • unsigned char:明确指定为无符号,可以表示的范围通常是 0 到 255。

字符类型在C语言中非常重要,因为它们不仅用于表示字符,还可以用于表示小的整数,这在处理字节级的数据操作时非常有用。此外,字符数组(即字符串)是通过char类型的数组来实现的,每个数组元素存储字符串中的一个字符。

2. 声明和初始化

char letter = 'A'; // 使用单引号来指定字符常量
char ch1 = 'A', ch2 = 'B', ch3 = 'C'; //同时声明和初始化多个字符变量

3. 转义字符

在上述ASCII码表中,细心的同学可能发现有换行符\n,回车符\n 等用\加字符来代表一个操作的字符,这些就是转义字符。还有同学会思考,我如果要初始单引号字符,如果直接char = ’ ‘ ’;前两个单引号就会搭配起来,编译器会报错,那怎么般呢,这就需要利用到转义序列,以及神奇的 \

转义序列含义
\a警报(蜂鸣)
\b退格
\f换页
\n换行
\r回车
\t水平制表符
\v垂直制表符
\\反斜杠
\ ’单引号
\‘’双引号
\ ?问号
\0oo八进制值(oo必须是有效的八进制数,即每个o可表示0~7的一个数)
\xhh十六进制值(oo必须是有效的十六进制数,即每个o可表示0~f的一个数)

那么现在就可以初始那些特殊字符了

char a = ' \' '; //将a赋值为单引号'
char b = ' \n '; //将b赋值为换行,读取到这个字符会直接换行
char c = ' \\ '; //将c赋值为反斜杠

四、复数和虚数

在高等数学和数学建模以及科学工程应用中会经常遇到复数,那C语言中能否表示虚数呢?

C99标准支持复数类型和虚数类型,一般而言,虚数类型都是可选项。
C语言有3种复数类型:
float_Complex、double_Complex和long double _Complex

例如,float_Complex类型的变量应包含两个float类型的值,分别表示复数的实部和虚部。 类似地,C语言的3种虚数类型是float_Imaginary、double _Imaginary和 long double _Imaginary
如果包含complex.h头文件,便可用complex代替_Complex,用imaginary代替_Imaginary,还可以用大写字母I代替-1的平方根。
事实上,学习了结构体的数结构后,可以自己定义结构体来表示复数

总结

  • 关键字:

    基本数据类型由11个关键字组成:
    int、long、short、unsigned、char、float、double、signed、_Bool、_Complex和_Imaginary。

  • 有符号整型:

有符号整型可用于表示正整数和负整数。

  • int ——系统给定的基本整数类型。c语言规定int类型不小于16位。 short或short int——最大的short类型整数小于或等于最大的int类型整数。c语言规定short类型至少占16位。

  • long或 long int——该类型可表示的整数大于或等于最大的int类型整数。c语言规定1ong类型至少占32位。

  • long long或 long long int——该类型可表示的整数大于或等于最大的1ong类型整数。Long long类型至少占64位。 一般而言,long类型占用的内存比 short类型大,
    int类型的宽度要么和long类型相同,要么和short类型相同。例如,旧DOS系统的PC提供16位的short和int,以及32位的long;Windows
    95系统提供16位的short以及32位的int和 long.

  • 无符号整型: 无符号整型只能用于表示零和正整数,因此无符号整型可表示的正整数比有符号整型的大。 在整型类型前加上关键字unsigned表明该类型是无符号整型:unsignedint、unsigned
    long、unsignedshort。单独的unsigned相当于unsignedint。

  • 字符类型: 可打印出来的符号(如A、&和+)都是字符。根据定义,char类型表示一个字符要占用1字节内存。出于历史原因,1字节通常是8位,但是如果要表示基本字符集,也可以是16位或更大。

    • char——字符类型的关键字。有些编译器使用有符号的char,而有些则使用无符号的char。在需要时,可在char前面加上关键字signed或unsigned来指明具体使用哪一种类型。
  • 布尔类型 布尔值表示 true和false。C语言用1表示true,0表示false。

    • Bool——布尔类型的关键字。布尔类型是无符号 int类型,所占用的空间只要能储存0或1即可。
  • 实浮点类型: 实浮点类型可表示正浮点数和负浮点数。

    • float———系统的基本浮点类型,可精确表示至少6位有效数字。
  • double——储存浮点数的范围(可能)更大,能表示比float类型更多的有效数字(至少10位,通常会更多)和更大的指数。

  • long double——储存浮点数的范围(可能)比 double更大,能表示比double更多的有效数字和更大的指数。

  • 复数和虚数浮点数: 虚数类型是可选的类型。复数的实部和虚部类型都基于实浮点类型来构成:float _Complex、double _complex、long double _Complexfloat _Imaginary、double _Imaginary、long long_Imaginary


感谢大家看到这里,如果有问题欢迎大家在评论区指出。此外,数组、指针、结构体的内容比较复杂,会在后续的文章中详细讲解。
参考书籍:C Primer Plus(第六版)

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值