C语言基础——数据运算

article/2025/6/4 23:57:03

一 运算基础

运算的本质是根据已有数据,进行各种运算处理,得到新的数据。所以,运算的基础就是数据。在数据的表示方法中,声明的变量只是一个空的指代,并没有和具体的数据进行关联。如果要使用变量,就要把数据和变量进行关联,让指代具体化。

1.变量赋值

将变量与数据相关联,明确变量指代关系。
同理,变量声明只是告诉程序有一个数据,但数据还未知,还要将获取的赋值给变量,建立明确的指代关系,在C语言中,变量获取值的方式有以下两种:

a.用户输入

常见的变量赋值方式,获取用户输入值的方式有多种,如:scanf()、getchar()

函数scanf()常用的占位符:
在这里插入图片描述
函数scanf()除了可以获取单个输入值,还可以获取多个输入值。scanf(“占符位,占符位……”,&输入内容1,&输入内容2,……)。括号中第一个逗号为分隔符,分隔符可以是任意的,但是在程序中使用啥,用户输入时就要使用啥分隔,并且要注意中/英输入法要一致。

b.等号赋值

再声明变量时,用“=”为变量赋值
如: sizeof = 2
可以先声明变量再赋值,也可以声明时赋值

2.表达式

表达式由数值、运算符等按照特定规则排列构成的组合。
例:sizeof = 8 该表达式称为赋值表达式。赋值表达式包含了操作数(sizeof、8)与赋值运算符“=”两部分

a.最简单的表达式

常数和变量,但在程序中不能直接书写常数或变量。如果直接书写常数没意义,如果直接书写变量,系统显示未被定义。

b.表达式的值

表达式运算后的值,赋值运算中,将数值赋给变量就是一次运算。

c.表达式的数据类型

表达式的数据类型根据运算的值来确定。

3.多个表达式

表达式不仅可以单个使用,还可以利用运算符逗号让多个表达式组合起来使用,并将这个组合起来使用的表达式称为逗号表达式。
例:表达式1,表达式2,表达式3,……,表达式n; 运算顺序从左向右依次计算,整个式子的值、数据类型都与最后运算的子表达式的值、类型一致。

二.数值处理

在c语言中,数值处理包括整数、小数的各种运算处理,如算术运算、扩展赋值、增量/减量运算、正/负运算等。

1.算术运算

又称四则运算,包括加减乘除。在C语言中运算符:加法+、减法-、乘法*、除法/,等

a.加法运算符(+)

二目运算符,拥有两个操作数。可让两个数值或变量进行相加运算。

b.减法运算符(-)

二目运算符,拥有两个操作数。可让两个数值或变量进行相减运算。

c.乘法运算符(*)

二目运算符,拥有两个操作数。可让两个数值或变量进行相乘运算。

d.除法运算符(/)

二目运算符,拥有两个操作数。可让两个数值或变量进行相除运算(除数不能为0)

e.求余运算符(%)

二目运算符,拥有两个操作数,且两个操作数只能为整数,可让两个数值或变量进行求余运算。

在求余运算时,如果操作数一为正整数,操作数二为负整数,则运算结果为正整数

在求余运算时,如果操作数一为负整数,操作数二为正整数,则运算结果为负数

在求余运算时,如果操作数都为负整数,则运算结果为正整数

2.扩展赋值运算

在运算中,有些表达式中操作数和表达式结果相同,例如:a = a * b;这就有些复杂。在C语言中,为了提高效率和简化书写,提供扩展运算符,又称为复合赋值运算符在这里插入图片描述

3.增量/减量运算

当按顺序进行一个程序,变量要不断加一,如果使用加法运算符,就会特别麻烦,为了方便 引入增量运算符和碱量运算符。

a.增量运算符(++)

一目运算符,拥有一个操作数,且操作数必须是整数和小数类型的变量,让变量自行加运算。根据运算符号的使用位置,该运算符有两种语法形式。
前缀增量运算符会让操作符自增1后再参与其他运算。
在这里插入图片描述

后缀增量运算符会让操作符参与计算后,操作符的值再自增1在这里插入图片描述

b.减量运算符(–)

一目运算符,拥有一个操作数,且操作数必须是整数和小数类型的变量,让变量自行减运算。根据运算符号的使用位置,该运算符有两种语法形式。
前缀增量运算符会让操作符自减1后再参与其他运算。在这里插入图片描述
后缀增量运算符会让操作符参与计算后,操作符的值再自减1在这里插入图片描述

c.使用建议

所在一个表达式中尽量避免多次出现同一类运算。

4.正/负运算

正负运算符包含“+”“-”

a.正运算符(+操作符)

一目操作符,拥有一个操作符,该运算符一般用于格式上的对齐,并不能让负数变为正数

b.负运算符(-操作符)

一目操作符,拥有一个操作符,可以让数字进行负运算,改变数字的正/负。

5.数据类型不一致的处理

再C语言中,规定了一下3种针对数据类型不一致的处理方式。

a.自动转换

在C语言中,规定在表达式中如果出现数据类型不一致的情况,都必须转换为同一类型数据才能进行运算,而自动转化的方向是由作战存储单元少的数据类型向所占存储单元多的数据类型转换。在这里插入图片描述

c.小数运算

在C语言中,双精度类型是小数的默认存储方式。在表达式中如果出现了单精度和双精度两种类型的小数时,计算机会默认将其全部转换为双精度类型来进行运算和保存。

d.强制转换

强制转换又称手动转换。有时为了节约存储空间和其它目的,程序员要将数值手动转换为指定的数据类型。例如2.2+3.2,计算机会将其值自动转换为双精度类型,而为了节约存储空间,程序员可以强行将其转换为单精度类型,这样就省了很多存储空间。
强制转换的语法:(类型说明符)(表达式);
再该语法中,类型说明符的小括号是必须存在的,而表达式的小括号可有可无
在这里插入图片描述

6.运算优先等级

在C语言中,运算要遵守运算符的运算规则,包含优先级与结合性两部分。

a.优先级

在算数运算中,当遇到不同优先级的运算时要遵循运算符优先级的先后顺序来进行运算。++与–是最高级;+与-等级最低;使用()可以改变运算顺序。在这里插入图片描述

b.结合性

在运算中如果运算符优先级相同,就要遵循运算符的结合性来进行运算。运算符的结合性分为左结合与右结合,左结合性的执行顺序是从左向右,如四则运算符都是左结合的。右结合性执行顺序是从右向左的,如增量运算符。
在这里插入图片描述

7.数值比较

在C语言中,提供数值比较的专用运算符——数值比较运算符。
二目运算符,两个操作符,可以用两个操作符进行比较。将使用数值比较运算符构建的表达式称为关系表达式。

关系表达式的语法如下:操作数1 比较运算符 操作数2;
在C语言中,提供了六个数值比较的运算符。在这里插入图片描述

三.位运算

计算机的运算基础是二进制数的运算。所以在C语言中,也提供了关于二进制的运算符,并将其称为位运算。一个字节(byte)由8位(bit)组成,即8bit=1byte。

1.逻辑位运算

在二进制运算中,会涉及逻辑处理的运算。在C语言中,位逻辑运算符包括取反运算符(~)、位与运算符(&)、位或运算符(|)、异位或运算符(^)4种

a.取反运算符

取反运算符(~)属于一目运算符,拥有一个操作数。
取反运算符的语法:~ 操作符
取反运算符可以将数值转换为二进制数后按位取反,即0变1,1变0。

b.位于运算符

位于运算符(&)属于二目运算符,拥有两个操作数。
位于操作符语法:操作数1&操作数2;
位于运算符可以将数值转换为二进制数后按位进行与运算。其运算规则是将两个二进制数的对应位的值进行比较,如果这两个对应位的值都为1时,则运算结果为1,否则运算结果为0.

c.位或运算符

位或运算符(|)属于二目运算符,拥有两个操作数。
位或运算符的语法:操作数1 | 操作数2
位或运算符可以将数值转换为二进制数后按位进行或运算。其运算规则是将两个二进制数的对应位的值进行比较,如果这两个对应位的值都为0时,则运算结果为0,否则运算结果为1

d.位异或运算符

位异或运算符(^)属于二目运算符,拥有两个操作数。
位异或运算符的语法:操作数1 ^ 操作数2
位异或运算符可以将数值转换为二进制数后按位进行位异或运算。其运算规则时将两个二进制数的对应位的值进行比较,如果这两个对应位的值相同时,则运算结果为0,反之则为1

2.移位运算

在C语言中,移位运算符包括左移运算符(<<)右移运算符(>>) 两种。

a.左移运算符(<<)

二目运算符,两个操作符,且操作符数1表示要左移的数值,操作数二表示要左移的位数。
左移运算符语法:操作数1 << 操作数2
左移运算符可以将数值转换为二进制后按位进行左移运算。其运算规则是将二进制数向左移动,右侧空下的位用0补全。。 例如:1110000100<<4变为0001000000

b.右移运算符(>>)

二目运算符,拥有两个操作数,且操作符数1表示要右移的数值,操作数二表示要右移的位数。
右移运算符的语法:操作数1>>操作数2
右移运算符可以将数值转换为二进制数后按位进行右移运算。其运算规则是将二进制数向右移动,左侧空下的位用0补全。 例如:100110000>>4变为000010011.

3.位运算优先级

当书写同一个表达式中,如果同时出现多个位运算符,一定要注意运算符优先级。在这里插入图片描述
在位运算中,除了取反运算符(~)为右结合的,其他几个位运算符都为左结合的。

4.位运算扩展赋值运算

在C语言中,提供了5种位运算扩展赋值运算符。位运算扩展赋值运算符是将位运算符与赋值运算符结合使用的。所有的运算扩展赋值运算符都是右结合的。在这里插入图片描述

四.文本处理

文本数据包含很多文本信息。文本信息可以用来区分和记载数据。在C语言中,文本数据会以字符类型被存放。字符类型数据首先要被转换为整数类型数据,然后才能对其进行运算。所以,字符类型数据运算的本质就是字符对应的ASCII值的运算。
**char类型数据要先被转换为int类型数据后,才能对其进行运算。

五.状态处理

状态数据一般用于存放某种状态。一般状态数据包括真或假两种状态。在编程中,默认使用1表示真,使用0表示假。在C语言中,提供了4种对状态数据进行处理的运算符。

1。条件运算符(?:)

三目运算符,三个操作数,并根据操作数1的状态选择运算值。如果操作1的状态为真,则运算值为操作数2;如果操作数1的状态为假,则运算值为操作数3.在这里插入图片描述

2.逻辑运算符

在C语言中提供了三种逻辑运算符,即逻辑与、逻辑或及逻辑非。逻辑运算符可以用与判断是否符合条件,然后进行逻辑运算。

a.逻辑与运算符(&&)

二目运算符,拥有两个操作数。
逻辑与运算符的语法:操作数1 && 操作数2
其中,操作数1、2都属于条件表达式。如果这两个状态都为真,则运算值为真,反之则为假。

b.逻辑或运算符(||)

二目运算符,两个操作符
逻辑或运算符语法:操作数1 || 操作数2
其中,操作数1、2都为条件表达式。如果这两个操作数中至少有一个操作数的状态为真,则运算值为真,反之则为假。

c.逻辑非运算符(!)

一目运算符,一个操作数
逻辑非运算符语法:!操作数
其中,操作数属于条件表达式。如果这个操作数的状态为真,则运算值为0(假),如果这个操作数的状态为假,则运算值为1(真)
将使用逻辑运算符连接起来的表达式称为逻辑表达式。
在这里插入图片描述

d.短路原则

在C语言中提供了短路原则,以减少逻辑与运算符、逻辑或运算符的运算量。短路原则是指如果通过第一个操作数就能够算出结果,计算机就不会再对第二个操作数的状态真假进行判断,而会直接得出运算结果

e.逻辑运算优先级

在表达式中,如果同时出现多个逻辑运算符,一定要注意逻辑运算符优先级。在这里插入图片描述

六.运算符总结

1.运算符优先级汇总

运算符优先级决定了计算机的运算顺序。只有正确使用运算符,才能保证计算机的正确识别和计算。在这里插入图片描述

2.数据类型转换规则

在C语言中,当对操作数进行计算或存储时,都要保证所有操作数的数据类型相同。如果操作数的数据类型不同,就要进行转换。在转换时一定要注意以下规则:
(1)如果参与运算的操作数的数据类型不同,则要先将其转换成同一个数据类型,才能进行运算。
(2)必须是所占存储单元少的数据类型向所占存储单元多的数据类型转换,并保证数据类型转换后的数据精度不降低。
(3)若两种数据类型所占的字节数相同,且一种数据类型有符号,另一种数据类型无符号,则要将有符号数据类型转换成无符号数据类型
(4)所有的小数运算都是以双精度类型进行的
(5)当char类型和short类型数据参与运算时,必须将她们都转换为int类型后再进行运算。
(6)在赋值运算中,当赋值运算符两边操作数的数据类型不同时,计算机会自动将右边操作数的数据类型转换为左边操作数的数据类型。在这个转换过程中,如果左边操作数所占存储单元少于右侧操作数所占存储单元,则会降低转换后数据的精度,并丢失部分数据。
(7)数据类型在强制转换时,要注意强制转换后的数据所占存储单元的多少,避免存储时数据发生溢出,造成数据丢失。


http://chatgpt.dhexx.cn/article/WPlnN5iw.shtml

相关文章

C语言数据溢出

文章目录 int 类型char int 类型 unsigned int num -1;printf("%u", num);解析&#xff1a; 首先在寄存器产生一个负数-1&#xff0c;它在计算机中存储的补码是 32个1&#xff0c;共32个二进制位&#xff0c;当按照赋值号赋给无符号num变量时&#xff0c;符号位变成…

C语言 数据处理

在不使用scanf函数如何对输入的数进行逆序输出呢&#xff1f;首先要得到该数的位数&#xff0c;因为需要在顺序输出里使用。 代码如下: int Getfigure(int n) {int tmp0; //计算循环次数while(n ! 0){n / 10;tmp;}return tmp; //该数的位数 } 其次要清楚该处理…

【Keil 5安装教程】

文章目录 一、安装mdk二、激活mdk三、安装STM32芯片包四、安装C51单片机五、激活C51单片机 一、安装mdk 1、在解压的安装包里&#xff0c;点击运行mdk514.exe文件&#xff1b; 2、在弹出的页面中点击NEXT&#xff1b; 3、打勾I Agree&#xff0c;点击Next&#xff1b; 4、在…

keil3 安装教程

安装前先关闭杀毒软件和360卫士&#xff0c;注意安装路径不能有中文&#xff0c;安装包路径也不要有中文。 1.选中【Keiluvision 3 C51版】压缩包&#xff0c;鼠标右击选择【解压到Keil uvision 3 C51版】。 2.双击打开【Keiluvision 3 C51版】文件夹。 3.选中【KEILc51v802…

keil安装指导

keil arm 5.36下载地址 C51 960a下载地址 注册码 这个自己搜索下载 安装指导 注意&#xff1a; 如果你想C51和ARM一起安装&#xff0c;那就先安装C51再ARM版本的。如果你已经先安装完了ARM的也没关系&#xff0c;安装完C51的再重新安装下ARM的就可以 安装C51 双击你下…

c语言定义函数时形参定义的位置

今天在读Zlib库源码中第三方contrib/minizip文件时&#xff0c;发现一个有意思的东西&#xff1a; 定义函数时&#xff0c;其形参的类型放在函数()后面&#xff0c;()里只放了形参名 虽然这样最终用编译器&#xff08;如gcc等&#xff09;编译时是可以通过的&#xff0c;但是…

C语言函数(函数分类,参数,调用,声名及定义)

文章目录 [TOC](文章目录)一、C语言中函数的分类二、函数的参数及调用三、函数的嵌套调用和链式访问四、函数的声名和定义 一、C语言中函数的分类 库函数自定义函数 库函数&#xff1a;在开发的过程中&#xff0c;每个程序员都可能用得到&#xff0c;为了支持可移植性和提高程…

c语言函数定义的语法格式,C语言函数 -C语言函数定义的语法格式

C语言程序是由多个零件组合而成的&#xff0c;而函数就是最主要的组合零件。C语言程序的主体部分就是一个 main( ) 函数&#xff0c;它在 C语言程序中是必不可少的&#xff0c;每一个 C 程序都首先从 main( ) 函数开始执行。 C语言函数是什么 在前面的学习中&#xff0c;我们知…

c语言函数定义范围,c语言定义函数

函数是一段可以重复使用的代码&#xff0c;用来独立地完成某个功能&#xff0c;它可以接收用户传递的数据&#xff0c;也可以不接收。接收用户数据的函数在定义时要指明参数&#xff0c;不接收用户数据的不需要指明&#xff0c;根据这一点可以将函数分为有参函数和无参函数。 将…

C语言-函数(一):函数的定义和调用

函数是一个完成特定工作的独立程序模块&#xff0c;包括库函数和自定义函数两种。例如&#xff0c;scanf()、printf()等这些都为库函数&#xff0c;是由C语言系统提供定义&#xff0c;编程时直接调用即可&#xff1b;还有一种是自己定义的函数&#xff0c;我们主要介绍的就是这…

全网最细!软件测试—bug生命周期

测试人员最本质的工作就是寻找bug&#xff0c;提交bug、验证bug、推进bug的解决&#xff0c;直至软件达到发布的标准&#xff0c;提高软件的质量&#xff0c;及研发的工作效率和质量。 一、什么是bug 软件的BUG,狭义概念是指软件程序的漏洞或缺陷&#xff0c;广义概念除此之外还…

bug的生命周期你知道吗?一张图带你看懂它!

目录 1、什么是bug 2、bug的生命周期 3、如何描述一个bug 4、bug的级别 1、什么是bug 软件的bug狭义方面可以理解为是指软件程序的漏洞或缺陷&#xff0c;广义方面除找到程序漏洞之外&#xff0c;还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差…

如何描述一个BUG以及BUG级别的定义、生命周期

目录 一、如何描述一个BUG&#xff1f; 二、BUG级别的定义 1.崩溃 2.严重 3.一般 4.次要 三、BUG的生命周期 一、如何描述一个BUG&#xff1f; 1.版本号&#xff08;代码版本号&#xff09; 2.测试环境/平台 不同的浏览器对同一个页面解析是不一样的&#xff1a; ①…

一个BUG(缺陷)的生命周期

缺陷状态 对于一个问题&#xff0c;其处理过程是一个周期&#xff0c;周期的不同阶段&#xff0c;其所处的状态也是不一样的。不同状态所对应的处理人也是不一样的。 打开 &#xff1a; 表示问题被提交等待有人处理。 重新指派 &#xff1a; 问题被重新指派给某人处理。 处理 …

bug生命周期bug跟踪处理

一、BUG BUG&#xff1a;软件的缺陷 1.BUG的定义&#xff1a;----与软件测试的目的对应 软件的BUG,狭义概念是指软件程序的漏洞或缺陷&#xff0c;广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节、或与需求文档存在差异的功能实现等。 我们的职责就是&…

软件测试bug生命周期

测试人员最本质的工作就是寻找bug&#xff0c;提交bug、验证bug、推进bug的解决&#xff0c;直至软件达到发布的标准&#xff0c;提高软件的质量&#xff0c;及研发的工作效率和质量。 一、什么是bug 软件的BUG,狭义概念是指软件程序的漏洞或缺陷&#xff0c;广义概念除此之外…

简述Bug生命周期与Bug管理

Bug&#xff0c;即在测试过程中发现的问题&#xff0c;是测试工程师绩效最重要的考核之一&#xff0c;也是面试常被问到的知识领域。 今天&#xff0c;从Bug的生命周期入手&#xff0c;跟大家聊聊Bug管理。 Bug的生命周期如下所示&#xff0c;其中&#xff0c;新建、分配&…

(四)Bug的生命周期

Bug的属性 Bug重现环境 这个应该是我们重现bug的一个前提&#xff0c;如果没有这个前提&#xff0c;我们可能会无法重现问题&#xff0c;或者跟本就无从下手。 操作系统 这个是一般软件运行的一大前提&#xff0c;基本上所有的软件都依赖于操作系统之上的&#xff0c;对于一…

面试题之Bug的生命周期

今天来分享一个基础面试题&#xff1a;Bug的生命周期&#xff0c;虽然基础&#xff0c;但是面试被问到的概率很高。 Bug的生命周期&#xff0c;也就是一个Bug被发现到被关闭的过程&#xff0c;在整个生命周期中&#xff0c;不同的阶段对应不同的缺陷状态。 大家可以参考如下的…

测试之Bug与用例【创建Bug、Bug级别、Bug生命周期、测试用例的万能公式、设计测试用例具体方法】

文章目录 1. 如何创建Bug2. Bug的级别3. Bug的生命周期4. 面试题&#xff1a;跟开发产生争执怎么办5. 设计测试用例的万能公式使用万能公式对水杯设计测试用例 6. 设计测试用例的具体方法6.1 等价类6.2 边界类6.3 判定表6.4 正交法(allparis)6.5 场景设计法 1. 如何创建Bug 提…