Jump to content
  • Hello visitors, welcome to the Hacker World Forum!

    Red Team 1949  (formerly CHT Attack and Defense Team) In this rapidly changing Internet era, we maintain our original intention and create the best community to jointly exchange network technologies. You can obtain hacker attack and defense skills and knowledge in the forum, or you can join our Telegram communication group to discuss and communicate in real time. All kinds of advertisements are prohibited in the forum. Please register as a registered user to check our usage and privacy policy. Thank you for your cooperation.

    TheHackerWorld Official

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

 Share


NedK7

Recommended Posts

 

前言:

当我们学习完了标识符,常量和变量以后,这一章再学习完运算符及表达式,就基本把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个字节

Link to post
Link to comment
Share on other sites

 Share

discussion group

discussion group

    You don't have permission to chat.
    • Recently Browsing   0 members

      • No registered users viewing this page.
    ×
    ×
    • Create New...