如何深入掌握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;
 }



相关文章
|
6月前
|
C语言
C语言中条件操作符的应用
最后,条件操作符是个超级英雄,但不是每个代码问题都需要一个超级英雄来解决。一定要在适当的时候适度的使用它,那么它将成为你的编程工具箱中的一件强力工具。
316 75
|
8月前
|
人工智能 Java 程序员
一文彻底搞定C语言的表达式和语句
本文介绍了C语言中的表达式和语句,涵盖算术、关系等表达式及各类语句的用法,帮助初学者理解核心概念。本文介绍C语言表达式(算术、关系等)和语句(表达式、复合、控制、函数、空语句),助你掌握核心概念。
411 0
一文彻底搞定C语言的表达式和语句
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
164 0
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
469 0
|
9月前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
229 1
|
10月前
|
存储 网络协议 C语言
【C语言】位操作符详解 - 《开心消消乐》
位操作符用于在位级别上进行操作。C语言提供了一组位操作符,允许你直接操作整数类型的二进制表示。这些操作符可以有效地处理标志、掩码、位字段等低级编程任务。
396 8
|
10月前
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
433 7
|
12月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
203 10
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
377 1
|
程序员 C语言
【C语言基础考研向】06运算符与表达式
本文介绍了C语言中的运算符分类、算术运算符及表达式、关系运算符与表达式以及运算符优先级等内容。首先概述了13种运算符类型,接着详细说明了算术运算符的优先级与使用规则,以及关系运算符和表达式的真假值表示,并给出了C语言运算符优先级表。最后附有课后习题帮助巩固理解。
301 10