跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

C语言程序设计 运算符及表达式


NedK7

推荐的帖子

 

前言:

当我们学习完了标识符,常量和变量以后,这一章再学习完运算符及表达式,就基本把C语言中的“单词”这块完成了。

运算符分类:

算术运算符(+、-、*、/、%、++、--)

赋值运算符(=、复合赋值运算符)

关系运算符(>、<、==、>=、<=、!=)

逻辑运算符(!、&&、||)

条件运算符(? :)

逗号运算符(,)

移位运算符(<<、>>)

位运算符(~、|、^、&)

指针运算符(*,&)

求字节运算符(sizeof)

强制类型转换运算符((类型))

分量运算符(.、->)

下标运算符(【】)

其他

1,按照运算符在表达式中与链接运算对象的个数可分为:

(1)单目运算符

(2)双目运算符

(3)三目运算符

(4)其他

2,运算符的优先级:

优先级指一个表达式中不同运算符进行操作的先后顺序。通常所以单目运算符的优先级高于双目运算符

3,运算符的结合性:

结合性是指表达式中各种运算符优先级相同时,由运算符的结合性来确定表达式的运算顺序。

第一类:右结合性(运算符的结合性从右向左)单目,三目和赋值运算符

第二类:左结合性(运算符的结合性从左向右)以上都是

算术运算符

    运算符号     操作数数目    名称     运算规则   举例
          +           单目     正       取原值    +5
          -           单目     负       取负值     -5
          +           双目     加         加法   a+b
          -           双目     减         减法   a-b
          *           双目     乘         乘法   a*b
          /           双目     除         除法   a/b
         %           双目     模       求余数  5%7
        ++           单目   自增        自增1   a++
         --           单目   自减        自减1   a--

1,基本运算符算数时注意:

(1)除法运算:两个操作数都是整数时,结果为整数,小数部分省去;如果都是实数,则结果为实数

(2)取余运算:两个操作数必须为整数,其结果也为整数

2,自增、自减运算符:自增(++)和自减(--)运算是单日运算,其作用是使变量的值增1或减1,其优先致高于所有的双目运算。自增和自减运算的应用形式有两种

(1)前缀形式:运算符在变量前面,表示对变量先自动加1或自动减1,然后再参与其他运算,即先改变变量的值后使用,如++k和--k。

(2)后缀形式:运算符在变量后面,表示变量先参与其他运算,再对变量先自动加1或自动减1,即先使用后改变,如k++和k--。

 赋值运算符

 赋值运算符用“=”表示,它的作用是将一个数据赋给一个变量。例如:a=3的作用是把常量3赋给变量a。也可以将一个表达式赋给一个变量,例如a=x%b的作用是将表达式x%b的值赋给变量a。

赋值运算符用“=”是一个双目运算符,其结合性是从右向左。

符合的赋值运算符

定义:赋值运算符“=”和5种算术运算符(+、-、*、/、%)和5种位运算符(<、>、&、^、|)构成10种复合的赋值运算符。分别为:+=、-=、*=、/=、&=、<=、>=、&=、^=、|=。

例如:a+=3           等价于        a=a+3

           a*=a+3       等价于       a=a*(a+3)

 关系运算符

运算符 作用
>

大于

< 小于

>=

大于等于
<= 小于等于
== 等于
!= 不等于

1、关系运算符都是双目运算符,结合方向是自左向右。其中(>、<、<=、>=)优先关系相同,(==、!=)优先关系相同。

2,用关系运算符将两个任意类型的表达式连接起来的式子,称为关系表达式。它的结果是逻辑值0或1

(1)当两个运算对象之间满足给定的关系时,则表达式取真值1,否则,取假值0。
         例如:

         int a=12,b=14;     则表达式a<b的运算结果为真值1, a==b的结果为假值0。

(2)两个运算对象可以是算术表达式。如果是字符数据时,按其ASCI码值进行比较。

         例如: 'a'>‘b’的运算结果为假值0。

(3)关系表达式的值可以作为整数值参与运算。

         例如

         int = 10, b = 9, c=1,f;         

         f=a>b>c;           则f=0

         其中,关系运算符>的优先级高于赋值运算符=,而关系运算符是自左至右的结合方向,
        所以先执行a>b,结果为1,再执行1>c,结果为0,最后将0值赋给f。

 逻辑运算符

语言中的逻辑运算符是对两个关系表达式或者逻辑值进行比较的。

逻辑运算符共有三种:逻辑与&&、逻辑或||和逻辑非!

其中逻辑与和逻辑或是双目运算符,结合方向是自左至右,且逻辑与&&的优先级高于逻辑或||。逻辑非!是单目运算符,结合方向是自右自左。由于单目运算符的优先级高于双且运算符,所以它的优先级高于逻辑与和逻辑或。

a b a&&b a||b !a

 条件运算符

条件运算符由“?”和“:”组成,它的一般格式为

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

其解释为:首先计算表达式1,如果表达式1的值为真,则求解表达式2,以表达式2的值作为整个条件表达式的值;如果表达式1的值为假,则求解表达式3,以表达式3的值作为整个条件表达式的值。

它是C语言中唯一一个三目运算符,它的结合方向为自右向左。

例如:int  x=1,y=2,z;

          z=x>y?++x:y++;

运行结果为:x=1,y=3,z=2

 逗号运算符

“,”是C语言的一种特殊的运算符,称为逗号运算符。用逗号将多个表达式连接起来的式子称为逗号表达式。

逗号表达式的一般形式:表达式1,表达式2,···, 表达式n

逗号表达式的求解过程:从左至右地计算各个表达式的值,先求解表达式1,再求解表达式2 最后求解表达式n,整个逗号表达式的值为表达式n的值。

例如:求逗号表达式"a=5,a*=a,a+5"的值。

先求赋值表达式a=5的值,表达式的值为5, a的值为5;接着求复合赋值运算a*=a的值,表达式的值为25, a的值为25,最后求算术表达式a+5的值,表达式的值为30, a的值为25。因此,整个逗号表达式的值为30。

 移位运算符

移位运算符分为两类:左移运算符(<<)和右移运算符(>>)

左移运算符:

将一个二进制数按指定移动的位数向右移动。

移位规则:左边抛弃,右边补0

右移运算符:

将一个二进制数按指定移动的位数向右移动。

移位规则:最高位是0,左边补齐0;最高为是1,左边补齐1。

注:内存中存放的数据是二进制的补码

       原码:根据数值直接写出的二进制码

       反码:原码的符号位不变,其他位取反

       补码:反码+1

       (正整数的原码,反码和补码相同,)

举例:int num+10;

           num>>1;

           num<<1;

 位运算符

&    按位与

|     按位或

^    按位异或

注:对它们的二进制数进行操作,他们的操作数必须是整数。

举例:int num1 = 1;

           int num2 = 2;

          num1 & num2; num1 | num2; num1 ^ num2; 

 求字节运算符

sizeof是求变量(类型)所占空间的大小。很简单,直接通过举例即可理解

例:int a = -10;

       printf("%d\n", sizeof(a)); 

    其结果为4,因为int类型在空间中占4个字节

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...