数据类型和变量

目录

1. 数据类型

1.1 字符型

1.2 整型

1.3 浮点型

1.4 布尔类型

1.5 数据类型的长度

2.变量

2.1 变量的创建

2.2 变量的分类

3. 扩展

结言~



1. 数据类型

框架

数据类型和变量_第1张图片

本篇文章主要介绍内置类型,后续会介绍数组。

1.1 字符型

char //character
[signed] char //有符号的
unsigned char //⽆符号的

1.2 整型

//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//⻓整型
long [int]
[signed] long [int]
unsigned long [int]

1.3 浮点型

float//单精度浮点数
double//双精度浮点数

C语言中的float和double的主要区别在于它们的数据表示范围、精度以及所占用的存储空间:

1.数据表示范围:
 float:通常被称为单精度浮点数,它的指数范围为-127至128,而数值范围为3.4E-38至3.4E+38(乘以10^38)。
 double:也称为双精度浮点数,其指数范围为-1023至1024,而数值范围为1.7E-308至1.7E+308(乘以10^308)。
2.精度:
float:能够提供的有效数字位数为8位,这意味着它最多能表示大约3.4E+38的数值。
double:能够提供的有效数字位数为16位,这意味着它可以表示大约1.7E+308的数值。

3.存储空间:

float:占用4个字节(32位)的内存空间。
double:占用8个字节(64位)的内存空间。
4.运算速度:

float:在CPU上处理的速度一般比处理double快。
5.有效数字位数:

float:只能提供8位有效数字。
double:可提供16位有效数字。
6.注意事项:

在编程中,应根据实际需求选择合适的类型,以避免精度损失或溢出。
如果不特别声明,C语言会自动将小数视为double类型,因此在需要float时,必须进行强制转换。
综上所述,float主要用于需要较高精度但不需要非常大的数值表示的场景,而double则用于需要更高精度的数值计算,尤其是在科学计算领域。

1.4 布尔类型

C 语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 0 表⽰假,⾮零值表⽰真。
在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的。

关于C99可以去查一下,本文不做解释。

布尔类型的使⽤得包含头⽂件 
_Bool
布尔类型变量的取值是: true或者false
#include

_Bool flag = true;
if (flag)
 printf(" like \n")

大致了解数据类型后,下面介绍数据类型的长度。

1.5 数据类型的长度

这里需要引入sizeof操作符
sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字
节。

内存单位是用来描述计算机或其他电子设备中存储容量的单位。常见的内存单位有:

B(bit):计算机中数据的最小单位,可以是0或1。
KB(Kilobyte):1KB等于1024个字节,常用于描述较小的内存容量。
MB(Megabyte):1MB等于1024个KB,常用于描述计算机的内存容量。
GB(Gigabyte):1GB等于1024个MB,常用于描述较大的内存容量。
TB(Terabyte):1TB等于1024个GB,常用于描述非常大的内存容量。


字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

sizeof操作符的操作数可以是类型,也可以是变量或者表达式。

sizeof (类型)
sizeof 表达式
sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。
sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出⼤⼩。

#include 
int main()
{
	short a = 2;
	int b = 10;
	printf("%d\n", sizeof(a = b + 1));//2
	printf("%d\n", sizeof(b = a + 1));//4
	return 0;
}

Why?这里可能有疑惑:

sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在
程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。

运行结果

数据类型和变量_第2张图片

下面利用sizeof计算数据类型长度

#include 
int main()
{
	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(_Bool));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(long double));
	return 0;
}

运行结果

sizeof 运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给
系统⾃⼰去决定, sizeof 到底返回什么类型。不同的系统中,返回值的类型有可能是
unsigned int ,也有可能是 unsigned long ,甚⾄是 unsigned long long ,
对应的 printf() 占位符分别是 %u 、 %lu 和 %llu 。这样不利于程序的可移植性。
C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t ,⽤来统⼀表⽰ sizeof 的返
回值类型。对应当前系统的 sizeof 的返回值类型,可能是 unsigned int ,也可能是
unsigned long long 。
引入占位符%zd

关于占位符后面会介绍。

2.变量

概念:C语⾔中把经常变化的值称为变量,不变的值称为常量。

2.1 变量的创建

上面了解了类型,我们使用类型做什么呢?

答案是用来创建变量。

变量创建的语法形式是这样的:
data_type  name;
 | |         |
 | |         | 
数据类型    变量名
如:
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量

变量在创建的时候就给一个初始值,就叫初始化。

如:
int age = 18;
char ch = 'w';
double weight = 48.0;
unsigned int height = 100;

2.2 变量的分类

• 全局变量:在⼤括号外部定义的变量就是全局变量
全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
• 局部变量:在⼤括号内部定义的变量就是局部变量
局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。

变量在创建时,要初始化。全局变量不初始化为0,局部变量不初始化为随机值。

#include 
int global=1;//全局变量
int main()
{
	int local=2;//局部变量
	printf("%d\n", local);
	printf("%d\n", global);
	return 0;
}

运行结果

数据类型和变量_第3张图片

如果局部和全局变量名字相同呢?

#include 
int local =1;//全局变量
int main()
{
	int local=2;//局部变量
	printf("%d\n", local);
	return 0;
}

运行结果

其实当局部变量和全局变量同名的时候,局部变量优先使⽤。

3. 扩展

全局变量和局部变量在内存中存储在哪⾥呢?
⼀般我们在学习C/C++语⾔的时候,我们会关注
内存中的三个区域:栈区、堆区、静态区。


1. 局部变量是放在内存的栈区
2. 全局变量是放在内存的静态区
3. 堆区是⽤来动态内存管理的(后期会介绍)

其实内存区域的划分会更加细致,以后在操作系
统的相关知识的时候会介绍。

数据类型和变量_第4张图片

本篇文章多引用鹏哥C语言课件,对我学习C语言有很大帮助。若想更深刻的了解数据类型和变量可以去B站看相关视频。

结言~

这一章为大家介绍了基本的数据类型和变量相关知识,希望能对大家有所帮助!!

你可能感兴趣的:(C语言知识,c语言,开发语言)