4.C语言中的运算符

4.1算数运算符

c语言提供的算数运算符:+、-、*、/、%、++、--(float、double不能取余)

运算符功能说明举例
+加,一目取正a+b
-减,一目取负a-b
*乘法a*b
/除法a/b
%取模或求余a%b
++加1a++,++a
--减1

a--,--b

#include<stdio.h>


int main()
{
  float a=15, b=8, c;

  c = a + b;
  printf("c=%f \n",c);

  c = a - b;
  printf("c=%f \n",c);

  c = a * b;
  printf("c=%f \n",c);

  c = a / b;
  printf("c=%f \n",c);




    return 0;
}
4.2关系运算符

关系表达式的值是“真”和“假”,用“1”和“0”表示,如:5>0的值为真,即为1

运算符功能说明举例
>大于a>b
>=大于等于a>=2
<小于a<b
<=小于等于a<=2
==等于a==b
!=不等于a!=b
4.3逻辑运算符
运算符功能说明举例
逻辑反!(x==0)
&&逻辑与x>0 && x<10
||逻辑或y<10 || x>5

逻辑运算符"!"运算符的运算规律:

运算量结果
10
01

例如:

#include<stdio.h>
int main()
{
    int a =8,b =9;

    if(!((a-1)>=b))
       printf("ture \n");
   else
       printf("fause \n");



    return 0;

}

由于逻辑运算符"!"的作用所以运行结果是"ture"

逻辑与"&&"运算符的运算规律如下:短路特性-逢0截止

左运算量右运算量结果
111
100
010
100

例如:

#include<stdio.h>
int main()
{
    int a =8,b =9;

    if((a+1)>=b && b++ ) 
       printf("ture \n");
   else
       printf("fause \n");



    return 0;

}

逻辑或"||"运算符的运算规律如下:短路-逢1截止

左运算量右运算量结果
111
101
011
000

例如:

#include<stdio.h>
int main()
{
    int a =8,b =9;

    if((a-1)>=b || b++ )
       printf("ture \n");
   else
       printf("fause \n");
       printf("%d %d \n",a,b);


    return 0;

}
4.4位运算
运算符功能说明举例
~位逻辑反~a
&位逻辑与a&b
|位逻辑或a|b
^位逻辑异或

a^b

>>右移动a>>1
<<左移动a<<1

位逻辑反"~"运算符运算举例:

#include<stdio.h>

int main()
{
    unsigned char x = 0x17,y;

      y = ~x;


      printf("%#x \n",y);




    return 0;
}

运行结果为0xe8

位逻辑与"&"运算符运算规律如下:

左运算的位值右运算的位值位与结果值
000
010
100
111

举例:

#include<stdio.h>

int main()
{
    unsigned char x = 0126,y = 0xac,z;
          z = x&y;


        printf("%#x \n",z);




    return 0;
}

运行结果为0x4

位逻辑或"|"运算符的运算规律如下:

左运算量的位值右运算量的位值位或结果值
000
011
101
111

举例:

#include<stdio.h>

int main()
{
    unsigned char x = 076,y = 0x89,z;
        z = x|y;

        printf("%#x \n",z);



    return 0;

}

运行结果为oxbf

逻辑异或"^"运算符运算规律如下:相同为假,不同为真

左运算的位值右运算的位值位异或结果值
000
011
101
110

举例:

#include<stdio.h>

int main()
{
    unsigned char x = 076,y = 0x89,z;
        z = x^y;

        printf("%#x \n",z);



    return 0;

}

运行结果为0xb7

位运算的一般形式:

<运算量><运算符><表达式>其中:

·<运算量>必须为整形结果数值;

·<运算符>为左移(<<)或右移(>>)运算符;

·<表达式>也必须为整形结果数值

例如:

#include<stdio.h>

int main()
{
    unsigned char x = 0xe4,z;
        z = x<<3;

        printf("%#x \n",z);



    return 0;

}

运行结果为0x20

4.5赋值运算符
运算符功能说明
+=加赋值复合运算符
-=减赋值复合运算符
*=乘法赋值复合运算符
/=除法赋值复合运算符
%=求余赋值复合运算符
&=位与赋值复合运算符
|=位或赋值复合运算符
^=位异赋值复合运算符
>>=位右移赋值复合运算符
<<=位左移赋值复合运算符

举例:

#include<stdio.h>

int main()
{
    int count = 0, sum = 0;
    while(count++<100)
    {
        sum  += count;

    }

     printf("sum = %d \n",sum);



    return 0;
}

上面代码计算了从1加到100的数值运行结果为5050

4.6特殊运算符

4.6.1条件运算符

"?"是三目运算符,其运算的一般形式是:

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

        例如:

#include<stdio.h>

int main()
{
    int x = 70,y = 25;

    y = x++ > 70 ? 100 : 0;



    printf("x = %d y = %d \n",x,y);



    return 0;
}

运行结果为x = 71,y = 0

4.6.2逗号运算符

#include<stdio.h>

int main()
{
    float x = 0.5,y = 0.8,z = 0;

      z = (x+=5,y = x+0.8,z = x+y);

      printf("x = %f y = %f z = %f \n",x,y,z);

    return 0;
}

逗号运算符的运算结果由最后一个表达式决定

4.6.3sizeof运算符

运算符的一般形式:sizeof(类型或变量名)

注意:它只针对数据类型,而不针对变量

例如它可以看数据类型占用的字节大小:

#include<stdio.h>
#include<stdbool.h>
 
 int main()
{
 
    printf("%d %d %d %d \n",sizeof(bool),sizeof(char),sizeof(short),sizeof(int));
 
 
 
}

4.6.4c运算符的优先级

优先级

运算符

名称或含义

使用形式

结合方向

说明

1

[]

数组下标

数组名[常量表达式]

左到右

()

圆括号

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

.

成员选择(对象)

对象.成员名

->

成员选择(指针

对象指针->成员名

2

-

负号运算符

-表达式

右到左

单目运算符

(类型)

强制类型转换

(数据类型)表达式

++

自增运算符

++变量名
变量名++

单目运算符

--

自减运算符

--变量名
变量名--

单目运算符

*

取值运算符

*指针变量

单目运算符

&

取地址运算符

&变量名

单目运算符

!

逻辑非运算符

!表达式

单目运算符

~

按位取反运算符

~表达式

单目运算符

sizeof

长度运算符

sizeof(表达式)

3

/

表达式 / 表达式

左到右

双目运算符

*

表达式*表达式

双目运算符

%

余数(取模)

整型表达式%整型表达式

双目运算符

4

+

表达式+表达式

左到右

双目运算符

-

表达式-表达式

双目运算符

5

<<

左移

变量<<表达式

左到右

双目运算符

>>

右移

变量>>表达式

双目运算符

6

>

大于

表达式>表达式

左到右

双目运算符

>=

大于等于

表达式>=表达式

双目运算符

<

小于

表达式<表达式

双目运算符

<=

小于等于

表达式<=表达式

双目运算符

7

==

等于

表达式==表达式

左到右

双目运算符

!=

不等于

表达式!= 表达式

双目运算符

8

&

按位与

表达式&表达式

左到右

双目运算符

9

^

按位异或

表达式^表达式

左到右

双目运算符

10

|

按位或

表达式|表达式

左到右

双目运算符

11

&&

逻辑与

表达式&&表达式

左到右

双目运算符

12

||

逻辑或

表达式||表达式

左到右

双目运算符

13

?:

条件运算符

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

右到左

三目运算符

14

=

赋值运算符

变量=表达式

右到左

/=

除后赋值

变量/=表达式

*=

乘后赋值

变量*=表达式

%=

取模后赋值

变量%=表达式

+=

加后赋值

变量+=表达式

-=

减后赋值

变量-=表达式

<<=

左移后赋值

变量<<=表达式

>>=

右移后赋值

变量>>=表达式

&=

按位与后赋值

变量&=表达式

^=

按位异或后赋值

变量^=表达式

|=

按位或后赋值

变量|=表达式

15

,

逗号运算符

表达式,表达式,…

左到右

补充内容:

1.各类数值型数据之间的混合运算


变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同的数据类型的量混合运算时,由编译系统自动完成。自动转换遵循以下规则:


1.若参与运算量的类型不同,则先转换成同一类型,然后进行运算。


2.转换按数据长度增加的方向进行,以保证精度不降低。如int 型和long 型运算时,先把 int 量转成long 型后再进行运算。


3.所有的浮点型运算都是以双精度进行的,即使仅含有float单精度运算的表达式,也要先转换成double型,再作运算。


4.Char型和 short型参与运算时,必须先转换成int 型。

在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分将四舍五入向前舍入。

2.强制类型转换


强制类型转换是通过类型转换运算来实现的。
其一般形式为:    


(类型说明符)(表达式)


其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。

例如:


(float)a 把a强制转换为实型(int )(x+y)把x+y的结果转换为整型在使用强制转换时应注意以下问题:
1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int )(x+y)写成(int)x+y 则表示把x 转换成int型之后再与y相加了。


2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。

3.算术运算符和算术表达式


运算符的优先级:C语言中,运算符的运算优先级共分为15级,1级最高,15级最低。在表达式中,优先级较高的先于优先级教低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。


运算符的结合性:

C语言中各运算符的结合性分为两种,即左结合性(自左向右)和右结合性(自右向左)。

例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则 y应先和“-”号结合,执行x-y 运算,然后再执行+z的运算。这种自左至右的结合方向称为“左结合性”。而自右向左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如 x=y=z,由于“=”的右结合性,应先执行 y=z 再执行 x=(y=z)运算。 C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

4.自增,自减运算符


自增1,自减1运算:

自增1运算符为“++”,其功能是使变量的值自增1.


 自减1运算符记为“--”,其功能是使变量值自减1.    


自增1,自减1运算符均为单目运算符,都具有右结合性,有以下形式:

++i :i自增1后参与其他运算

--i : i自减1后在参与其他运算

i++ :i参与运算后,i的值再自增1

i- : i参与运算后,i的值再自减1


在理解和使用上容易出错的是i++ 和i--,特别是当他们同时出现在比较复杂的表达式或语句中时,常常难于弄清,因此需要仔细分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值