欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言操作符

程序员文章站 2022-03-07 16:17:48
...

操作符

分类:

        算数操作符     移位操作符       位操作符    赋值操作符   单目操作符

        关系操作符     逻辑操作符       条件操作符    逗号表达式

        下标应用         函数调用          结构成员

算数操作符

  +   -     *     /      %

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

2.对于 / 操作符如果两个操作数都为整数,执行整数除法.而只要有浮点数执行的就是浮点数除法.

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

移位操作符

  <<  左移操作符   >>  右移操作符

        左移操作符   移位规则:  左边抛弃,右边补 0 .

        右移操作符   移位规则:  1> 有符号整数右移称算数移位,最高位补符号位,右边丢弃  2>无符号整数右移称逻辑移位,最高位补0,右边丢弃

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

位操作符

  &  按位与
  |  按位或
  ^  按位异或
注: 他们的操作数必须是整数. 

赋值操作符

赋值操作符是一个很棒的操作符,他可以然你得到一个你之前不满意的值,也就是你可以给自己重新赋值.

包括复合赋值符

+=
*=
/=
%=
>>=
<<=
&=
|=
^=

单目操作符

!       逻辑反操作
-       负值
+       正值
&       取地址
sizeof  操作数的类型长度(以字节为单位)
~       对一个数的二进制按位取反
--      前置,后置--
++      前置,后置++
*       间接访问操作符(解引用操作符)
(类型)   强制类型转换

关系操作符

>
>=
<
<=
!=      用于测试"不相等"
==      用于测试"相等"

逻辑操作符

&&    逻辑与
||    逻辑或

条件操作符

exp1?exp2:exp3       //若表达式exp1为真,输出exp2,反之输出exp3

逗号表达式

exp1,exp2,exp3....

逗号表达式,就是用逗号隔开的多个表达式,从左向右依次执行.整个表达式的结果是最后一个表达式的结果

小标引用,函数调用和结构成员

1.[ ] 下标引用操作符

操作数: 一个数组名+ 一个索引值

 

2.( ) 函数调用操作符,接受一个或者多个操作数: 第一个操作数是函数名,剩余的操作数就是传递给函数的参数 

 

3.访问一个结构的成员

结构体.成员名   或者   结构体指针->成员名

表达式求值

表达式求值的顺序一部分是由操作符的优先级和结核性决定,

同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型

 

隐式类型转换

C的整形算术运算总是以缺省整型类型的精度来进行的.

为了获得这个精度,表达式中的字符和短整型操作数在使用之前转换为普通整型,这种转换称为整型提升.

/*********************
*1.整形提升,char short 运算时提升成int
**********************/
//#include<stdio.h>
//#include<stdlib.h>
//int main()
//{
//    char c = 0xb6;
//    short s = 0xb600;
//    int i = 0xb6000000;
//    if (c == 0xffffffb6)
//        printf("c\n");
//    if (s == 0xffffb600)
//        printf("s\n");
//    if (i == 0xb6000000) 
//        printf("i\n");
//    system("pause");         //输出c,s,i 即char short 在运算时提升为int 型,高位补符号位
//    return 0;
//}

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行,

下面的层次体系称为寻常算数转换

long double
double
float
unsigned long int
long int
unsigned int
int

如果某个操作数的类型在上面的这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算.

操作符的属性

复杂表达式的求值有三个影响的因素

1.操作符的优先级

2.操作符的结合性

3.是否控制求值顺序

操作符

描述

用法示例

结果类型

结合

是否控制求值顺

()

聚组

(表达式)

与表达式

N/A

()

函数调用

rexp(rexp,...,rexp)

rexp

L-R

[ ]

下标引用

rexp[rexp]

lexp

L-R

.

访问结构成员

lexp.member_name

lexp

L-R

->

访问结构指针成员

rexp->member_name

lexp

L-R

++

后缀自增

lexp ++

rexp

L-R

--

后缀自减

lexp --

rexp

L-R

!

逻辑反

! rexp

rexp

R-L

~

按位取反

~ rexp

rexp

R-L

+

单目,表示正值

+ rexp

rexp

R-L

-

单目,表示负值

- rexp

rexp

R-L

++

前缀自增

++ lexp

rexp

R-L

--

前缀自减

-- lexp

rexp

R-L

*

间接访问

* rexp

lexp

R-L

&

取地址

& lexp

rexp

R-L

sizeof

取其长度,以字节表

sizeof rexp sizeof(类

型)

rexp

R-L

(类

型)

类型转换

(类型) rexp

rexp

R-L

*

乘法

rexp * rexp

rexp

L-R

/

除法

rexp / rexp

rexp

L-R

%

整数取余

rexp % rexp

rexp

L-R

+

加法

rexp + rexp

rexp

L-R

-

减法

rexp - rexp

rexp

L-R

<<

左移位

rexp << rexp

rexp

L-R

>>

右移位

rexp >> rexp

rexp

L-R

>

大于

rexp > rexp

rexp

L-R

>=

大于等于

rexp >= rexp

rexp

L-R

 

操作符

描述

用法示例

结果类型

结合

是否控制求值顺

<

小于

rexp < rexp

rexp

L-R

<=

小于等于

rexp <= rexp

rexp

L-R

==

等于

rexp == rexp

rexp

L-R

!=

不等于

rexp != rexp

rexp

L-R

&

位与

rexp & rexp

rexp

L-R

^

位异或

rexp ^ rexp

rexp

L-R

|

位或

rexp | rexp

rexp

L-R

&&

逻辑与

rexp && rexp

rexp

L-R

||

逻辑或

rexp || rexp

rexp

L-R

?:

条件操作符

rexp ? rexp : rexp

rexp

N/A

=

赋值

lexp = rexp

rexp

R-L

+=

以...加

lexp += rexp

rexp

R-L

-=

以...减

lexp -= rexp

rexp

R-L

*=

以...乘

lexp *= rexp

rexp

R-L

/=

以...除

lexp /= rexp

rexp

R-L

%=

以...取模

lexp %= rexp

rexp

R-L

<<=

以...左移

lexp <<= rexp

rexp

R-L

>>=

以...右移

lexp >>= rexp

rexp

R-L

&=

以...与

lexp &= rexp

rexp

R-L

^=

以...异或

lexp ^= rexp

rexp

R-L

|=

以...或

lexp |= rexp

rexp

R-L

逗号

rexp,rexp

rexp

L-R

 

相关标签: c