第四章 表达式

news/2024/7/7 7:17:52 标签: c语言, 后端

第四章 表达式



目录

  • 一. 概述
  • 二. 算术运算符
  • 三. 赋值运算符
  • 四. 自增、自减运算符
  • 五. 表达式求值
  • 六. 表达式语句



一. 概述

  表达式是表示如何计算值的公式。最简单的表达式就是变量和常量。更加复杂的表达式把运算符用于操作数(操作数自身就是表达式)。


二. 算术运算符

  算数运算符是包括C语言在内的许多编程语言中都广泛应用的一种运算符,这类运算符可以执行加法、减法、乘法和除法。

在这里插入图片描述

  除了%之外,二元运算符既允许操作符是整数也允许操作符是浮点数,两者混合也可以。当把int型的操作数和float型的操作数混合在一起时,运算结果是float型。


运算符/和运算符%:

  1. /,当两个操作数都是整数时,运算符/会丢掉分数部分来“截取”结果。1/2结果是0。
  2. 运算符%要求操作数是整数。如果两个操作数中有一个不是整数,程序会无法编译通过。
  3. 把零用作/或%的右操作数会导致未定义的行为。
  4. 当运算符/或%用于负操作数时,其结果难以确定。C89标准,两个中有一个是负数,那么除法的结果既可以向上取整,也可以向下取整。(-9/7结果是-1,-2)(-9%7结果是-2,5)。C99标准,除法的结果总是向零截取。(-9/7结果是-1)(-9%7结果是-2)。


术语:由实现定义,C标准故意对C语言的部分内容未加指定,并认为其细节可以由“实现”来具体定义。所谓实现是指程序在特定的平台上编译、链接和执行所需要的软件。因此,根据实现的不同,程序的行为也可能会有稍许差异。


运算符的优先级和结合性
优先级:()
最高优先级:+ -(一元运算符)
* / %
最低优先级:+ -(二元运算符)


结合性:
二元算数运算符是左结合的,即从左向右结合的。
一元算数运算符是右结合的,即从右向左结合的。


三. 赋值运算符

  1. 简单赋值
      C语言中=是简单赋值。简单赋值运算符具有副作用(即改变操作数的值(左操作数)),多个赋值运算符串联在一起的表达式是右结合。尽量避免嵌入式赋值。


  1. 左值
      大多数C语言允许它们的操作数是变量、常量或者包含其他运算符的表达式。然而,赋值运算符要求它的左操作数必须是左值。左值表示存储在计算机内存中的对象,而不是常量或计算的结果。变量是左值,变量是已知的唯一左值。


  1. 复合赋值
      利用变量的原有值计算出新值并重新赋值给这个变量。例如i = i + 2。C语言的复合赋值运算符允许缩短这个语句以及类似的语句。使用+=运算符,如i += 2。另外还有9种复合赋值运算符,-=、*=、/=、%=。和=一样是右结合。


四. 自增、自减运算符

  1. C语言中,允许使用++(自增)和–(自减)。


  1. 后缀++和后缀—比一元的正负号优先级高,而且每个都是左结合的。前缀++和前缀—与一元的正负号优先级相同,而且都是右结合的。


五. 表达式求值

在这里插入图片描述


子表达式求值顺序
C语言没有定义子表达式的求值顺序。

#include<stdio.h>
int main(){
	int a,b,c;
	a = 5;
	c = (b = a + 2) - (a = 1);
	printf("%d\t%d\t%d\t",a,b,c); 
	getchar();
	return 0;
}

专业术语:未定义的行为


六. 表达式语句

  C语言有一条不同寻常的规则,那就是任何表达式都可以用作语句。



本篇博客为本人学习C语言时的详细笔记,如有错误之处,还望各位指正。
文章为原创,如要转载请注明出处


http://www.niftyadmin.cn/n/147120.html

相关文章

华为OD机试 -数组二叉树(Java) | 机试题+算法思路+考点+代码解析 【2023】

数组二叉树 题目 二叉树也可以用数组来存储,给定一个数组,树的根节点的值存储在下标1,对于存储在下标N的节点,它的左子节点和右子节点分别存储在下标2N和2N+1,并且我们用值-1代表一个节点为空。 给定一个数组存储的二叉树,试求从根节点到最小的叶子节点的路径,路径由…

无线WiFi安全渗透与攻防(七)之WIFI07-WEP-wifite自动化渗透WEP加密

WIFI07-WEP-wifite自动化渗透WEP加密 1.wifite介绍 wifite是一款自动化wep、wpa以及wps破解工具&#xff0c;不支持windows和osx。wifite的特点是可以同时攻击多个采用wep和wpa加密的网络。wifite只需简单的配置即可自动化运行&#xff0c;期间无需人工干预。 目前支持任何li…

windows 批量去除文件名中的括号 空格 重命名 获取文件夹中文件名

Windows 平台 批量去除文件名中的括号 空格 重命名 获取文件夹中文件名 目录 1.获取文件夹中文件名 2.批量去除文件名中的括号 3.批量去除文件名中的空格&#xff1a; 4.批量重命名&#xff1a; 1.获取文件夹中文件名 运行CMD调出DOS窗口&#xff0c;先用“CD C:\XXX&quo…

关于nextInt和nextLine使用中的一些冲突

nextInt和nextLine方法发生了冲突 Scanner类是是用来接收控制台输入的字符串以及基本数据类型的类 常用方法: 1.int nextInt(): 接收输入的int型的数据。 结束符为空格或者回车2.String nextLine() 接收输入的是字符串的数据 结束符为回车 3.String next(): 接收输入的字符串…

CANoe入门系列--用CAPL实现简单的开关灯

CANoe入门系列 简单的开关灯实现CANoe入门系列一、创建新的项目二、通过DBC创建节点搭建画布 Panel配置环境变量使用CAPL编程使信号传输运行一、创建新的项目 双击选择CANFD500kBaud/4MBaud 新建页面如下 二、通过DBC创建节点 选择dbc的存放位置 右击Network nodes&#xf…

[计算机组成原理(谭志虎 微课版)]第一章 计算机系统概述(课后习题[习题1]+答案解析)

1.1 解释下列名词。 摩尔定律&#xff1a; 当价格不变时&#xff0c;集成电路上可容纳的晶体管数量大约18-24个月翻一番&#xff0c;性能也将提升一倍。 汇编器&#xff1a; 负责将汇编语言翻译成机器语言目标程序的汇编程序 编译器&#xff1a; 负责将高级语言翻译成汇编代码…

C# 程序加载C++DLL错误集锦及解决

抛出问题 C#项目要采用第三方的方案实现某个功能&#xff0c;第三方提供了一个C实现的库Dll库。然鹅&#xff0c;在实现的过程中遇到一系列的问题&#xff0c;最后都搞懂了&#xff0c;现分享下过程&#xff0c;主要问题总结如下&#xff1a; 1、System.DllNotFoundException…

STM32实现UART-CAN融合式高速串口

STM32实现UART-CAN融合式高速串口 STM32的UART硬件电路&#xff0c;在进行线接传输时&#xff0c;一般低于230400bps的波特率&#xff0c;因为单端信号传输的特性&#xff0c;限制了传输距离和传输速度。而在同一块PCB板內进行短距离UART传输&#xff0c;则可以达到2Mbps及至4…