首页 > 其他分享 >C语言(数据,运算符)

C语言(数据,运算符)

时间:2024-11-26 20:32:06浏览次数:7  
标签:字符 变量 int C语言 运算符 内存 类型 数据

C语言学习笔记2——数据,运算符

变量
概念

在程序执行过程中其中的值可以被改变的量

  • 变量代表内存中具有特定属性的一个存储单元,他是用来存储数据的,也就是存变量的值
  • 变量应有个名字,以便于通过名字访问变量
    在这里插入图片描述

举例:

#include <stdio.h>
int main()
{
	// ① 声明变量并初始化
	int age = 21; // 注意:这里的 = 不是我们所认为的相等,在这里代表赋值操作,意思是将右边的值赋左边的变量
	// ② 先声明,再赋值
	int count;
	count = 10;
	// ③ 初始化并修改变量的值
	int number = 12;
	printf("%d\n",number);//12, %d是十进制int的格式化符
	number = 22;
	printf("%d\n",number);//22 我们对同一个变量进行赋值的时候,后面赋的值会覆盖掉前面赋的值
}

基本类型:我们创建变量的同时在内存中开辟对应的内存空间

命名规则:

  • 变量名必须以字⺟(a~z)或者下划线(_)开头,后⾯可以跟若⼲个字⺟、数字或下划线;

  • 变量名不能与C语⾔中已经存在的标识符(如:int,float,void,if,break等)重名;

    变量名、变量值、变量所占存储单元之间的关系:

在这里插入图片描述

标识符

  • 标识符的定义:⽤来表⽰对象的名字的有效字符。对象包括变量、常量、数组、函数、类型等。也就是标识符就是对象的名字。
  • 标识符的构成:

​ ①C语⾔规定标识符只能由字⺟、数字和下划线3种字符构成,且第⼀个必须为字⺟或者下划线。举例:number,_int

​ ②编译系统对⼤⼩写敏感。变量名和函数名⼀般⽤⼩写字⺟+下划线,常量名和枚举名⼀般⽤⼤写字⺟+下划线。举例:

​ 变量(set_count)函数(set_count())常量(SET_COUNT)

* C语⾔中有3类标识符

​ ①关键字:有32个,系统有特定的含义和⽤途:如:float,int,if,else等,不能⽤作⾃定义表⽰符(变量和函数)

​ ②系统预定义的标识符:如系统提供的库函数名sim,printf,main,scanf以及预处理命令define,include等

​ ③⽤⼾标识符:⽤⼾定义的标识符,⽤来给程序的变量、⾃定义函数、符号常量、数组、结构体、共⽤体、⽂件等命名

注意:

在C语⾔中,要求对所⽤到的变量使⽤前必须先强制定义,即:先定义,后使⽤。

  • C语⾔中有32个关键字,不允许⽤⼾⽤来定义标识符。

在这里插入图片描述

  • 12个预处理命令:

在这里插入图片描述

说明

  • ⼀个类型说明语句可以同时定义多个类型的变量,各个变量之间使⽤逗号","分隔,多个同类型的变量也可以⽤多个类型说明语句定义:
// 一个类型说明语句可以同时定义多个类型的变量
int a,b,c,d;// 同类型
int a1 = 3,b1 = 4,c1 = 5, d1 = 6;
// 多个同类型的变量也可以用多个类型说明语句
int a;
int b;
int c;
int d;
int a1 = 3;
int b1 = 4;
int c1 = 5;
int d1 = 6;
  • ⽤类型说明语句定义的变量只是说明了为这些变量分了存储空间。以便于存放与之相同类型的数据,在未对这些变量赋值前,这些变量中的值是随机的;
  • C语⾔允许在定义变量的同时为变量赋初始值;
  • 在为⻓整型变量初始化或者赋值时,如果被赋值数据为基本整型常量,则C编译系统⾃动将被赋值数据转换成与相应变量类型⼀致。
  • 由于各种整型变量所占的字节数有限,因此,他们所能存放的整数有⼀定范围。

基本类型数据

整形数据

用来存放整型数据的变量

我们定义一个整型的变量,C编译系统实际是在内存中分配了能够存储一个整型数据的存储空间,并用变量名来标识这个空间,对该空间的使用也就可以通过变量名来访问。

若不知道你所用的C编译系统对变量分配的存储空间的大小,可用sizeof运算符查询,如:

printf("%d,%d,%d\n",sizeof(int),sizeof(short),sizeof(long));// 4,2,8

案例

整型变量的定义和使用。

#include <stdio.h>
int main()
{
	int a,b,c,d;// 定义有符号整型变量,可以存储负数,也可以存储正数
	unsigned int u;// 定义无符号整型变量,只能存储正数,正数的范围会变大
	a = 12;
	b = -24;
	u = 10;
	c = a + u,d = b + u;
	printf("a+u=%d,b+u=%d\n",c,d);// a+u=22,b+u=-14;
}
整形数据在内存中的存储方式
  • 数据在内存中是以二进制形式存放的
int i;//定义i为存储整形的变量
i=10;//给i赋整数10为值

则十进制数10的二进制形式为1010,这内存中存放形式为:
在这里插入图片描述

  • 实际上数据在内存中是以二进制补码形式表示的。
  • 正数补码和原码相同,负数的的补码是该数绝对值的二进制形式,按位取反加1
可见

在存放整数的存储单元中,最左边的一位表示符号位,符号位0表示正数,1表示负数

浮点型数据

概念:用来表达实数(小数)的数据类型

浮点型变量的分类
  • 单精度浮点型(flaot):在64位系统中典型尺寸是4字节,精确到小数点后6位,%f
  • 双精度浮点型(double):在64位系统中典型尺寸是8字节,精确到小数点后15~16位,%lf
  • 长双精度浮点型(long double):在64位系统中典型尺寸是16字节,
注意:占用内存越多,能表达的精度就会越高
浮点型数据在内存中的存放形式

浮点型数据在内存中按照指数型形式进行存放,系统将一个浮点型数据分成小数部分和指数部分,分别存放

类别符号位指数位小数部分指数偏移量
单精度1位(剩31)68位(31~23)23位(22~00)127
双精度1位(剩43)11位(62~52)52位(51~00)1023
字符型数据

概念:字符型变量用来存放字符变量

说明:一个字符只能存放一个字符,C编译系统 都规定一个字节的存储空间来存放一个字符,因此,一个字符变量在内存中的大小是1字节

字符数据在内存中的存储形式

字符常量存入一个字符便变量,实际上并不是把该字符本身存入内存单元中,二十将该字符对应的ASCII码存入内存单元

'a’的ASCII码为97、'b’的ASCII编为98,他们在内存中的存放形式:
在这里插入图片描述

实际上是按照二进制存放,形式为:

在这里插入图片描述

由此可见,在内存中字符数据的存储形式与整型数据类似,这就使得字符型数据和整型数据之间可以通用。也就是1个字符数据既可以字符形式输出,也可以以整数形式输出

  • 以字符形式输出时,编译系统将内存单元中的ASCII码转换成相应的字符,然后输出。
  • 以整数形式输出时,直接将ASCII码作为整数输出。
  • 因此,可以对字符数据进行算术运算,这时相当于对其ASCII码进行算术运算

注意:字符数据只占1个字节,只能存放0~255范围内的整数。

C语言允许字符数据与整数直接进行算术运算,
可以相互赋值。每一个英文小写字母比它相应的大写字母的ASCII大32

运算符

各类数值型数据间的混合运算
  • 整型、实型、字符型数据间可以进行混合运算,运算时,参加运算的两个数据如果 类型不同 ,则首先将其类型转换成一致再运算,转换规则是:

    ​ 将优先级低的类型转换到优先级高的类型,被称作自动类型转换在这里插入图片描述

注意:在混合运算过程中,系统所进行的类型转换并不改变原数据的类型,只是在运算过程中将其值变成同类型后在运算。

  • C语言提供了强制类型转换(大转小 )运算,可得到一个所需类型的数据,强制类型转换的形式为:

​ ①double)a 将a的值转换成double类型

​ ②(int)(x+y)将x+y的结果转换为int类型

​ ③(int)x+y将x的值转换成int类型后与y进行相加

​ ④(float)(5%3)将5%3的值转换成float类型

特别需要说明的是:在强制类型转换的过程中,并不改变原变量的类型,只是在运算过程中将其值转换类型后再运算。

C语言运算符和C语言表达式

运算符
序号名称符号序号名称符号
1算术运算符±*/%8指针运算符* &
2关系运算符> < >=<= == !=9字节数运算符sizeof
3位运算符<< >> ~ | ^ &10下标运算符[]
4赋值运算符= += -= *= /= %=11强制类型转换运算符(类型)
5逻辑运算符! && ||12分量运算符. ->
6条件运算符/:13其他函数调用运算符()
7逗号运算符
表达式

所谓表达式就是将操作对象用运算符连接起来的符合C语法规则的式子。

序号名称举例说明
1算术表达式2+6.7*3.5计算结果是数值类型
2关系表达式x>0,y<=z+6计算结果是布尔类型 ,或0和非0
3逻辑表达式x>0&&y>0计算结果是布尔类型 ,或0和非0
4赋值表达式a=5,sum+=i规则:右往左
5逗号表达式x=3,y+=4,z-=8分隔,并列,结果是最后一个表达式的值

C语言规定了运算符的优先级和结合性。在表达式求值时,按运算符的优先级别的高低次序执行。如果运算对象两侧的运算符优先别相同,如a+b+c,则按照规定的“结合方向”处理。

C语言运算符优先级
                 |

| ---- | ---------- | ------------- | ------------------------------------ |
| 1 | 算术表达式 | 2+6.7*3.5 | 计算结果是数值类型 |
| 2 | 关系表达式 | x>0,y<=z+6 | 计算结果是布尔类型 ,或0和非0 |
| 3 | 逻辑表达式 | x>0&&y>0 | 计算结果是布尔类型 ,或0和非0 |
| 4 | 赋值表达式 | a=5,sum+=i | 规则:右往左 |
| 5 | 逗号表达式 | x=3,y+=4,z-=8 | 分隔,并列,结果是最后一个表达式的值 |

C语言规定了运算符的优先级和结合性。在表达式求值时,按运算符的优先级别的高低次序执行。如果运算对象两侧的运算符优先别相同,如a+b+c,则按照规定的“结合方向”处理。

C语言运算符优先级

在这里插入图片描述

标签:字符,变量,int,C语言,运算符,内存,类型,数据
From: https://blog.csdn.net/expectsl/article/details/144067294

相关文章

  • 学习分享-队列-2(数据结构C语言)
    本章通过C++代码使用STL(标准模板库)中的queue类实现了栈的基本操作,包括入队、出队、查看队头元素、判断队列是否为空以及清空队列。导入头文件#include<iostream>#include<queue>//引入队列的头文件usingnamespacestd;创建队列queue<int>q;入队操作q.push(10)......
  • 【数据结构-队列】力扣622. 设计循环队列
    设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一......
  • 面试题精选14-数据库中如何实现行锁和表锁
    行锁(RowLock)SQLSERVER行锁是在数据行层面上实施的锁定。当你对特定的行执行操作时,SQLServer通常会自动使用行锁来确保数据的一致性和隔离性。使用事务并指定隔离级别:在事务中使用适当的隔离级别可以使SQLServer在需要时使用行锁。BEGINTRANSACTION;SETTRANSACTION......
  • 网易面试:说说 HTTPS 原理?HTTPS 如何保证 数据安全?
    本文原文链接文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完......
  • vue3-setup基本使用(非响应式数据)
    OptionsAPI与COmpositionAPI选项式APiVue2的AP设计是Options(配置、选项式)风格的Options类型的API,数据、方法、计算属性等,是分散在:data、methods、computed中的,若想新增或者修改一个需求,就需要分别修改:data、methods、computed,不便于维护和复用组合式APIVue3的API设计......
  • 高效数据集成:旺店通转金蝶云星空案例分析
    旺店通·企业奇门数据集成到金蝶云星空的技术案例分享在现代企业的运营过程中,数据的高效流转和精准对接是提升业务效率的重要环节。本文将重点介绍如何通过轻易云数据集成平台,将旺店通·企业奇门的数据无缝集成到金蝶云星空系统中,实现其他入库单的高效管理。本次集成方案命名为......
  • 带你从入门到精通——MySQL(八. CTE表达式和数据库设计)
    建议先阅读我之前的博客,掌握一定的MySQL前置知识后再阅读本文,链接如下带你从入门到精通——MySQL(一.基础知识)-CSDN博客带你从入门到精通——MySQL(二.单表查询)-CSDN博客带你从入门到精通——MySQL(三.多表查询)-CSDN博客带你从入门到精通——MySQL(四.常用函数一)-CSDN博客......
  • 如何使用yolov8深度学习目标检测模型训练——芯片缺陷数据集/芯片表面缺陷数据集 1600
    如何使用YOLOv8模型训练芯片表面缺陷识别检测数据集。我们将从数据集的准备、模型的加载、训练配置和训练过程等方面进行详细说明。1.数据集准备数据集概述数据集名称:芯片表面缺陷识别检测数据集数据集来源:自制数据集内容:包含1600张图像,每张图像都有对应的标签......
  • 使用Python常用库处理-可视化凯斯西储大学轴承数据集 完成轴承原始信号图、灰度图和灰
    凯斯西储大学轴承数据图包括原始信号图,灰度图,灰度图像加噪声图处理和可视化凯斯西储大学轴承数据集,包括原始信号图、灰度图和灰度图像加噪声图。我们将使用Python和一些常用的库来完成这些任务。1.数据集准备数据集概述数据集名称:凯斯西储大学轴承数据集数据集来......
  • 如何使用Yolov5训练使用——航拍无人机视角垃圾数据集检测,26700余张无人机图像,超过4万
    无人机视角垃圾检测,26700余张无人机图像,超过4万标注信息,共3.6GB数据量,可用于环卫快速检查,垃圾快速定位等应用。好的,无人机视角垃圾检测是一个非常实用的应用,可以显著提高环卫工作的效率。以下是一个基于PyTorch的完整代码示例,涵盖了数据加载、模型构建、训练、验证和评估......