IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 如何深入掌握C语言操作符(详解) -> 正文阅读

[C++知识库]如何深入掌握C语言操作符(详解)

目录

前言

操作符

算术操作符

移位操作符

左移操作符移位规则

??右移操作符移位规则

大小的变化

位操作符

一道有意思的例题

异或(^)的特点?

赋值操作符

复合赋值符?

使用举例

?单目操作符

对于sizeof操作符

对于++/--操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员

[ ] 下标引用操作符 操作数

( ) 函数调用操作符

.访问一个结构的成员

C语言运算符优先级


前言

本文章主要讲解点:各种操作符的介绍?

操作符

分类:

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

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

算术操作符


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


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

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

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

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

移位操作符


>> 右移操作符

<< 左移操作符


左移操作符移位规则

左边抛弃、右边补0

?右移操作符移位规则

?首先右移运算分两种:

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;
 }

关系操作符

  • >
  • >=
  • <
  • <=
  • !=? ? ? ?用于测试“不相等”
  • == ? ? ?用于测试“相等”

注意: 在编程的过程中== 和=非常容易混淆写错,而造成错误

逻辑操作符

  • && ? ? 逻辑与
  • || ? ? ? ?逻辑或

区分逻辑与和按位与 区分逻辑或和按位或

1&2----->0
1&&2---->1
1|2----->3
1||2---->1

条件操作符

exp1 ? exp2 : exp3

这是一个三目操作符

当exp1的值为真时,执行exp2表达式,反之,执行exp3表达式

求a,b中最大值
int max = a>b ? a : b;

逗号表达式

exp1,exp2,exp3,...,expN?

逗号表达式:就是用逗号隔开的多个表达式

逗号表达式,从左向右依次执行整个表达式的结果是最后一个表达式的结果

下标引用、函数调用和结构成员

[ ] 下标引用操作符 操作数

  • 一个数组名 + 一个索引值(经常与数组一起使用)
 int arr[10];//创建数组
 arr[9] = 10;//实用下标引用操作符
 [ ]的两个操作数是arr和9

( ) 函数调用操作符

  • 接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
int main()
 {
 test1();            //实用()作为函数调用操作符
 test2("hello ");   //实用()作为函数调用操作符
 return 0;
 }

.访问一个结构的成员

  • . 结构体.成员名
  • -> 结构体指针->成员名
    #include <stdio.h>
    struct Stu
    {
     char name[10];
     int age;
     char sex[5];
     double score;
    };
    void set_age1(struct Stu stu)
    {
     stu.age = 18;
    }
    void set_age2(struct Stu* pStu)
    {
     pStu->age = 18;//结构成员访问
    }
    int main()
    {
     struct Stu stu;
     struct Stu* pStu = &stu;//结构成员访问
    
     stu.age = 20;//结构成员访问
     set_age1(stu);
    
     pStu->age = 20;//结构成员访问
     set_age2(pStu);
     return 0;
    }
    

C语言运算符优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

--

()

圆括号

(表达式)/函数名(形参表)

--

.

成员选择(对象)

对象.成员名

--

->

成员选择(指针)

对象指针->成员名

--

2

-

负号运算符

-表达式

右到左

单目运算符

~

按位取反运算符

~表达式

++

自增运算符

++变量名/变量名++

--

自减运算符

--变量名/变量名--

*

取值运算符

*指针变量

&

取地址运算符

&变量名

!

逻辑非运算符

!表达式

(类型)

强制类型转换

(数据类型)表达式

--

sizeof

长度运算符

sizeof(表达式)

--

3

/

表达式/表达式

左到右

双目运算符

*

表达式*表达式

%

余数(取模)

整型表达式%整型表达式

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

5

<<?

左移

变量<<表达式

左到右

双目运算符

>>?

右移

变量>>表达式

6

>?

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

<?

小于

表达式<表达式

<=

小于等于

表达式<=表达式

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

表达式1?

表达式2: 表达式3

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

--

/=

除后赋值

变量/=表达式

--

*=

乘后赋值

变量*=表达式

--

%=

取模后赋值

变量%=表达式

--

+=

加后赋值

变量+=表达式

--

-=

减后赋值

变量-=表达式

--

<<=

左移后赋值

变量<<=表达式

--

>>=

右移后赋值

变量>>=表达式

--

&=

按位与后赋值

变量&=表达式

--

^=

按位异或后赋值

变量^=表达式

--

|=

按位或后赋值

变量|=表达式

--

15

逗号运算符

表达式,表达式,…

左到右

--

说明:

? ? ?同一优先级的运算符,运算次序由结合方向所决定
? ? ?简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

C语言优先级转自:?http://blog.csdn.net/huangblog/article/details/8271791

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:26:01  更:2021-08-06 09:26:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 14:57:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码