c语言 运算符

C语言中的运算符

由一个或多个操作数(变量,常量,字面值)及运算符组成的复合C语言规则的式子叫做表达式

表达式经由计算得到的结果称为表达式的值

C语言中可以分为左值和右值:左值:可以写的内存块(变量)。

右值:可以读的内存块(变量,常量,字面值)。

C语言中的运算符包括:

算术运算符:+ (加) , - (减) ,* (乘) ,/ (除) ,%(取余,模运算) ,++ (自增) ,––(自减)

关系运算符:>(大于) ,<(小于) ,==(等于) ,!=(不等于) ,>=(大于等于) ,<=(小于等于)

逻辑运算:&& (与) ,|| (或) ,! (非)

赋值运算符:\n= (赋值)+= ,-= ,*=, /= ,%=

算术复合赋值运算符  &=, |=,^=,~,>>,<<

位运算复合赋值运算符   位运算符:&,|,^,~,>>,<<

条件运算符:?:(条件运算符,三目运算符,三元运算符)

逗号运算符:,

指针运算符:&(取地址符) *(寻址符)

求字节运算符:sizeof(获取字节数)

特殊运算符:()(括号运算符,更改表达式运算顺序),[ ](数组下指针访问成员运算符),·(结构体变量访问成员运算符)

关于运算符的几个重要性质:优先级:运算符执行的优先级,优先级高的先执行

结合性:当优先级相同时,可以通过结合性确定表达式如何结合来确定执行顺序。

类别:参与当前运算符运算的操作数个数,一元,二元,三元

一、算术运算符

1.+、-、*、/、% 都属于二元运算符。

运算规则同数学中的运算规则。结果是一个值(右值、常量值)。需要特别注意的地方:C语言中的算术运算结果的类型,由参与运算的两个操作数类型决定,当两个int进行算术运算时,结果必然也是int类型。(两个整型进行除法运算,实际完成的是整除运算)/ 除法运算符 和 % 取余运算符 的右操作数不能为0。

% 取余运算符:取余运算要求左右操作数必须为整数。

2 .++称之为自增运算符、––称之为自减运算符,都属于一元运算符。

拿++举例:(–规则与++相同)

前自增(前加加):++操作数先在操作数自身基础上自加1,再取操作数的值。

后自增(后加加):操作数++先取操作数的值,再在操作数自身基础上自加1。在同一个表达式中,不要多次对一个变量进行自增操作,最好保证一个表达式中涉及到自增操作的变量只出现一次。(不要出现这种表达式:++i + ++i + i++)

二、赋值运算符

1 简单赋值运算符

=(简单赋值运算符),是一个二元运算符。优先级很低(倒数第二低,除了逗号运算符,赋值运算符最低)。结合性从右到左。

2.2复合赋值运算符

op=(op表示算术运算符及位运算符)(+=、-=、%=…)a+=3; // 表示在a自身基础上自加3 a = a + 3;

三、关系运算符

>(大于)、<(小于)、==(等于)、!=(不等于)、>=(大于等于)、<=(小于等于)二元运算符,结合性从左到右

>、<、>=、<= 的优先级要高于 、!=。

关系运算符的优先级小于算术运算符。

关系运算符的结果 1 和 0。(1代表true,0代表false)

四、逻辑运算符

&&(逻辑与,二元运算符)、||(逻辑或,二元运算符)、!(逻辑非,一元运算符)

从结果上来讲,C语言中1代表真,0代表假。从参与逻辑运算的操作数上来讲,C语言中非0代表真,0代表假。

&& 逻辑与

真 && 真 -> 真                   真 && 假 -> 假

假 && 真 -> 假                    假 && 假 -> 假

|| 逻辑或

真 || 真 -> 真                       真 || 假 -> 真

假 || 真 -> 真                       假 || 假 -> 假

! 逻辑非       

  !真 -> 假         !假 -> 真

逻辑或的短路问题:当左操作数为真时,即可判断表达式结果为真,右操作数不执行。

逻辑与的短路问题:当左操作数为假时,即可判断表达式结果为假,右操作数不执行。

五、条件运算符(三元运算符、三目运算符)

一般形式:操作数1 ? 操作数2 : 操作数3

表示的含义:判断操作数1结果是否为真,如果操作数1结果为真,则整个条件表达式的结果为操作数2,否则整个条件表达式的结果为操作数3。

条件运算符是唯一的一个三元运算符,所以有些地方又称条件运算符为三元运算符。

六、位运算符

1.&(位与)、|(位或)、~(位非)、^(位异或)、<<(位左移)、>>(位右移) 位运算就是直接操作二进制位。运算符含义:&:两个操作数按位进行与运算 (例如根据ip地址和掩码求网段)

|:两个操作数按位进行或运算

~:将操作数按位进行非运算

^:两个操作数按位进行异或运算异或规则:相同为0,不同为1

0 ^ 0 -> 0     1 ^ 1 -> 0     0 ^ 1 -> 1  1 ^ 0 ->1

2 位移运算符

<<(位左移) >>(位右移)

位移:将操作数的每一位向左(或向右)移动指定位数。位移运算符通常操作对象是无符号整形。位移运算符要求两个操作数都必须是正数。

<<位左移     操作数1 << 操作数2 : 将操作数1的内存中存储的每一位依次向左移动操作数2位。移出位丢弃,空余位补0,注意有符号数左移会覆盖符号位

>> 位右移    操作数1 >> 操作数2 : 将操作数1的内存中存储的每一位依次向右移动操作数2位。右移等价于整除2。对于无符号整型,空出位置补0。对于有符号整数,空出的符号位补原符号位。(负整数右移1位等价于整除2上取整)

七、逗号运算符, (逗号运算符)

一般形式: 操作数1 , 操作数2 :操作数2作为逗号表达式的结果。

语言中的类型转换

C语言中的类型转换分为 显示类型转换 、隐式类型转换。

显示类型转换(强制类型转换)(希望转换成的类型)操作数(double)10int a = 20; (double)a\n隐式类型转换并不是程序员的强制行为,而是编译器自动实现的类型转换,会往范围较大类型去转换。C

言中进行算术运算要求左右两边操作数数据类型一致。

整型 与 浮点数类型运算,整型先提升到 double

优先级表

307dc52688014628b223fe7a85b5c2f8.png

9e6399184fb544508268ecbf00054282.png 

932cc600744a4c649dbdf34b02b2dcde.png 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值