【无标题】

本文详细介绍了编程语言中的各种运算符,包括算术运算符如+-*/%,逻辑运算符如&&||!,位运算符如&|^~<<>>,以及三目运算符和逗号运算符的用法和优先级规则。此外,还提到了运算符的结合方向和在表达式求值中的智能算法。
摘要由CSDN通过智能技术生成

1.运算符:

1、算术运算符: / % + - *

注意: 取余操作%只能应用于整数**

a = 20 ; 把值20 赋给左边的空间

2、逻辑运算符: && 、 || 、 !

1、逻辑与 &&

格式: 
        表达式1 && 表达式2 
        
说明: 
        表达式1 成立 并且 表达式2 也成立 ,那么 该 逻辑与表达式 成立 

例子:

    a = 10;
    b = 20;
    a && b    成立        

        该逻辑与还有一个智能算法:表达式1 && 表达式2 && 表达式3 && 表达式4 && 表达式5 && 表达式6从左往右,一旦能够确定该 逻辑表达式 的值,则停止往后计算 ,一旦碰到 假 ,则不在往后执行

        例子:

a = 10; 
b = 20;
a && b && a+b && 0 && a++ && b-- && a--     碰到0 且后面都是 逻辑& 可以立刻判定整个式子为假

2、逻辑与 ||

格式:
    表达式1 || 表达式2 
说明:
    表达式1 成立 或者 表达式2 成立 ,那么 该 逻辑或表达式 成立

        智能算法: 表达式1 || 表达式2 || 表达式3 || 表达式4 || 表达式5 || 表达式6 从左往右,一旦能够确定该 逻辑表达式 的值,则停止往后计算 一旦 碰到 真 ,则不在往后执行

3、逻辑非: !

格式:
    !(表达式1) 
说明:
    表达式1 为真  则 !(表达式1) 为假 
    表达式1 为假  则 !(表达式1) 为真

练习: 注意这个例题

int a = 10;   1
int b = 20;   20
a && b && a++ && b++  && 0 && a++ && b-- || a++ && b-- || a+b && a-- && b-- || a+b
        

3、单目运算法 :++ -- 对单一的变量进行操作

概念:对 单个目标(某一块的空间) 的操作

++ :

int a = 10;
a++;    // ++在后,先将a的值赋值给 a++ ,然后 a再自加1  // a = a+1;
++a;    // ++在前,先a自加1 ,在将a的值赋值给 ++a;  

--:

int a = 10;
a--;    // --在后,先将a的值赋值给 a-- ,然后 a再自减1  // a = a-1;
--a;    // --在前,先a自减1 ,在将a的值赋值给 --a; 

4、关系运算符:> < >= <= == !=

关系运算符:

< >= <= == !=

格式 : 变量 > 变量 ---- 得到 真 或者 假 1 :

5、移位运算:<< >> 操作的是补码

移位操作符的两个操作数必须是整形

1、左移操作符:

左移操作都是一样的,所有的位数一起移动,都是舍弃溢出位,然后缺失位补0,不用考虑符号位

格式:

表达式 << n

例子: int a = 10; a << 3; // 将a的值取出来放入到cpu寄存器中,然后在cpu寄存器中做 左移操作 ,空出来的位置自动补0

2、右移操作符:

a >> 3;

1、算术右移 (有符号数): 所有的位数一起移动,空出来的位全 补 符号位 相当于 a /(2 ^3)

2、逻辑右移(无符号数) : 所有的位数一起移动空出来的位 补 零 (无符号数)

案例:

   -4 >> 2  (结果为  -4 / (2^2) = -1)
-4  源码	1000 0100
    反码	1111 1011
    补码	1111 1100
    >> 2  
    补码	1111 1111 (高位补上符号位 1)
    反码	1111 1110
    源码 	1000 0001  ===》  -1

6、位运算:& 、 | 、 ^ 、 ~ 、 利用补码来计算

1、位与 : &

表达式1 & 表达式2 ====》 相同位上的数据,都是1,结果才是1 ​ 例子 :

short a = 800;
short b = 60;
00000011 00100000    a
00000000 00111100    b
00000000 00100000    a&b 结果为32  正数三码合一

2、位或 : |

表达式1 | 表达式2 ====》 相同位上的数据,如果有1 ,结果就是1

short a = 800;
short b = 60;
00000011 00100000    a
00000000 00111100    b
00000011 00111100    a | b 结果	828	

3、异或 : ^

表达式1 ^ 表达式2 ====》 相同位上的数据,数据不相同,结果就为1

short a = 800;
short b = 60;
00000011 00100000    a
00000000 00111100    b
00000011 00011100   a ^ b 结果 796

4、取反: ~

~ 表达式 =-======》 0 变 1 1 变 0

short a = 800;

00000011 00100000  ~a

补码:11111100 11011111   

反码: 11111100 11011110 

源码: 10000011 00100001	结果:	-801	

7、三目运算: ?:

格式:

表达式1 ? 表达式2 : 表达式3

说明 :

表达式1成立,则选择 表达式2 
表达式1不成立,则选择 表达式3

例子:

int a,b;
scanf("%d%d",&a,&b);
int max = a > b ? a : b;

8、逗号运算符:,

逗号运算符使用时,要在使用语句首尾添加括号

格式 : 表达式1,表达式2,表达式3,表达式4 解释: 从左往右 依次 执行每一个 表达式然后将 最后一个 表达式的值 作为整个 逗号表达式的值

注意是,从左往右一直到最后一个表达式都要执行

例子:

int a = 10;
int b = 20;
int c = 30;
int d = (a++,b++,c++,a+b,a++,b++,c++);
结果:a: 12,b: 22,c: 32,d: 31

9、运算符的优先级:

括单术 移关位 逻三赋逗 ​

括 : 括号: () [] -> . (结构体的.) ​

单 : 单目: ++ -- ~ ! sizeof() (强转) &(取地址) * ​

术 : 算术: + - * / % ​

移 : 移位: << >> ​

关 : 关系: > >= < <= == != ​

位 :位运算: &(位与) | (位或) ^(异或) ​

逻 : 逻辑: && || ​

三 : 三目: ?: ​

赋 : 赋值: = += -= ..... ​

逗 : 逗号: , ​ ​

例子:

	int a=10,b=20,c=30;

	a *= b+c;   ( * = 是赋值运算符, 所以 先计算 b + c)

10.结合方向(记忆思路):

单目运算符三目运算符赋值运算符 结合方向是从右至左, 其他的都是从左至右。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值