如何深入掌握C语言操作符及表达式求值(详解)(一)

简介: 本文章主要讲解点:​​​​​​​各种操作符的介绍 表达式求值

前言


本文章主要讲解点:

  1. 各种操作符的介绍  
  2. 表达式求值

操作符

分类:

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用、函数调用和结构成员

注意:

其中移位操作符和位操作符都是对数据在内存中储存的二进制序列进行操作

算术操作符

   +     -     *(乘法)     /(除法)     %(取余)


1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数

2. 对于 / 操作符如果两个操作数都为整数,执行整数除法(相当于取余返回整数值)

而只要有浮点数执行的就是浮点数除法

3. % 操作符的两个操作数必须为整数返回的是整除之后的余数

移位操作符


>> 右移操作符

<< 左移操作符


左移操作符移位规则

左边抛弃、右边补0

20210805210442200.png

右移操作符移位规则

首先右移运算分两种:

1. 逻辑移位 左边用0填充,右边丢弃

2. 算术移位 左边用原该值的符号位填充,右边丢弃

注意 : 对于移位运算符,不要移动负数位,这个是标准未定义的


int num = 10;
num>>-1;//error

大小的变化

左移:每左移一位,相当于乘2

右移:每右移一位,相当于除2

位操作符


&  //按位与    (两数二进制位都为1 —>1)

|  //按位或     (两数二进制位有一个为1 —>1)

^  //按位异或 (两数二进制位不同为1,相同为0)

注:他们的操作数必须是整数

一道有意思的例题

不能创建临时变量(第三个变量),实现两个数的交换

#include <stdio.h>
int main()
{
 int a = 10;
 int b = 20;
 a = a^b;
 b = a^b;
 a = a^b;
 printf("a = %d b = %d\n", a, b);
 return 0;
}

异或(^)的特点

1.两数相同,异或为0
2.0与任何数异或,还是这个数
3.(从上面来看可以说)一个数异或另一个数两次还是原数

赋值操作符

复合赋值符

赋值操作符可以与其他操作符连用,形成复合赋值符

  • +=  
  • -=
  • *=  
  • /=
  • %=
  • >>=  
  • <<=
  • &=
  • |=  
  • ^=
  • 使用举例
int x = 10;
x = x+10;
x += 10;//复合赋值
//其他运算符一样的道理。这样写更加简洁

单目操作符

!           逻辑反操作

-           负值

+           正值

&           取地址

sizeof      操作数的类型长度(以字节为单位)

~           对一个数的二进制按位取反

--          前置、后置--

++          前置、后置++

*           间接访问操作符(解引用操作符)

(类型)       强制类型转换


单目操作符即只有一个操作元素

多少目即操作符需要带上多少个数据

对于sizeof操作符

求变量(类型)所占空间的大小

 printf("%d\n", sizeof(a));
 printf("%d\n", sizeof(int));
 printf("%d\n", sizeof a);//这样写行不行?  可以
 printf("%d\n", sizeof int);//这样写行不行? 不可以
与数组结合时: 
int arr[3] = {1,2,3} 
sizeof(arr) 结果为12(arr表示整个数组) 
sizeof(arr+0)//或者sizeof(arr[0]) 结果为4(表示首元素地址)

注:sizeof不是函数,是关键字是,是操作符

对于++/--操作符

//++和--运算符
//前置++和--
 //前置++和--:
 #include <stdio.h>
 int main()
 {
 int a = 10;
 int x = ++a;
 //先对a进行自增,然后对使用a,也就是表达式的值是a自增之后的值。x为11。
 int y = --a;
 //先对a进行自减,然后对使用a,也就是表达式的值是a自减之后的值。y为10;
 return 0;
 }
 //后置++和--
 #include <stdio.h>
 int main()
 {
 int a = 10;
 int x = a++;
 //先对a先使用,再增加,这样x的值是10;之后a变成11;
 int y = a--;
 //先对a先使用,再自减,这样y的值是11;之后a变成10;
 return 0;
 }



相关文章
|
3月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
70 0
|
3月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
225 0
|
10天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
30 10
|
28天前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
140 1
|
2月前
|
程序员 C语言
【C语言基础考研向】06运算符与表达式
本文介绍了C语言中的运算符分类、算术运算符及表达式、关系运算符与表达式以及运算符优先级等内容。首先概述了13种运算符类型,接着详细说明了算术运算符的优先级与使用规则,以及关系运算符和表达式的真假值表示,并给出了C语言运算符优先级表。最后附有课后习题帮助巩固理解。
98 10
|
26天前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
157 0
|
2月前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
287 8
|
2月前
|
C语言
C语言程序设计核心详解 第二章:数据与数据类型 4种常量详解 常见表达式详解
本文详细介绍了C语言中的数据与数据类型,包括常量、变量、表达式和函数等内容。常量分为整型、实型、字符型和字符串常量,其中整型常量有十进制、八进制和十六进制三种形式;实型常量包括小数和指数形式;字符型常量涵盖常规字符、转义字符及八进制、十六进制形式;字符串常量由双引号括起。变量遵循先定义后使用的规则,并需遵守命名规范。函数分为标准函数和自定义函数,如`sqrt()`和`abs()`。表达式涉及算术、赋值、自增自减和逗号运算符等,需注意运算符的优先级和结合性。文章还介绍了强制类型转换及隐式转换的概念。
|
3月前
|
C语言
C语言------运算符与表达式
这篇文章是C语言运算符与表达式的实训教程,通过多个示例程序展示了如何使用算术运算符、关系运算符、逻辑运算符以及条件语句来解决实际问题,并介绍了如何通过函数库简化复杂数学运算。
C语言------运算符与表达式
|
3月前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
45 6