算术、关系、逻辑运算符

来源:互联网 发布:鲨鱼记账怎么数据没了 编辑:程序博客网 时间:2024/04/30 10:55
原文地址:算术、关系、逻辑运算符作者:影子
用来表示各种运算的符号称为运算符。例如,数值运算中经常用到的加、减、乘、除符号就是运算符。由于它们是进行算术运算的,所以称为算术运算符。
  运算符必须有运算对象。C语言中的运算符的运算对象可以是一个,称单目运算符;运算对象也可以是两个,称双目运算符;运算对象还可以是三个,称三目运算符。单目运算符若放在运算对象的前面称为前缀单目运算符;若放在运算对象的后面称为后缀单目运算符。双目运算符都是放在两个运算对象的中间。三目运算符在C语言中只有一个(条件运算符),是夹在三个运算对象之间的。
  每个运算符都代表对运算对象的某种运算,都有自己特定的运算规则。每个运算符运算的对象都规定了数据类型,同时运算结果也有确定的数据类型。
  用运算符把运算对象连接起来所组成的运算式在C语言中称为"表达式"。每个表达式都可以按照运算符的运算规则进行运算,并最终获得一个值,称为表达式的值。
  当表达式中出现多个运算符,计算表达式值时,就会碰到哪个先算,哪个后算的问题,我们把这个问题称为运算符的优先级。计算表达式值时,优先级高的运算要先进行。注意,在复杂的表达式中,用圆括号括住的部分要先算,其优先级别高于任何运算符。若在圆括号中又有圆括号,则内层圆括号优先于外层圆括号。
  
                  ┌基本算术运算符( +,-,*,/,%)
            ┌算术运算符┤
            │     └增1减1运算符( ++,-- )
            │
            │关系运算符(>,<,==,>=,<=,!= )
            │逻辑运算符( !,&&,|| )
            │
            │     ┌基本赋值运算符( = )
      ┌基本运算符┤赋值运算符┤
      │     │     └算术自反赋值运算符(+=,-=,*=,/=,%= )
      │     │
      │     │逗号运算符(,)
      │     │条件运算符(? :)
C语言运算符┤     │数据长度运算符(sizeof)
      │     │
      │     │    ┌位逻辑运算符( ~,&,|,^)
      │     └位运算符┤位移位运算符(>>,<< )
      │           └位自反赋值运算符(&=,|=,^=,>>=,<<= )
      │    
      │     ┌强制运算符( ( ) )
      └专用运算符┤下标运算符( [ ] )
            │成员运算符( ->,.)
            └指针运算符( &,*,+,- )
 
                C语言运算符分类

  注意C语言中的运算符都是键盘上的符号(如 |、~、^等)或若干符号的组合(如&&、||、>>、<<、->等),书写或输入时不要出错。此外,少数运算符号有双重含义,主要有下列几个:
  (1)"+"号。在算术运算中既表示单目的取正运算,又可表示双目的加法运算,在指针运算中表示双目的加法运算。
  (2)"-"号。在算术运算中既表示单目的取负运算,又可表示双目的减法运算,在指针运算中表示双目的减法运算。
  (3)"*"号。在算术运算中表示双目的乘法运算,在指针运算中表示指针变量指向的变量。
  (4)"&"号。在位逻辑运算中表示双目"与"运算,在指针运算中表示取地址的运算。
  这些两重含义运算符的理解与当时的运算对象有关,在学习时要注意区分。

    一、算术运算符
  算术运算符包括基本算术运算符和增1、减1运算符,其中基本运算符常简称为算术运算符。

    1. 基本算术运算符
  基本算术运算符是对数据进行简单算术运算的。要注意字符型数据也可以看成整型数据,参加基本算术运算。

?/P>

对象数

名称

运算符

运算规则

运算对象

运算结果

结合性

单目

正负

+
-

取原值
取负值

整型或实型

整型或实型

自右向左

双目




+
-
*
/

加法
减法
乘法
除法

自左向右

%

整除取余

整型

整型

   双目加(+)、减(-)、乘(*)运算和普通算术运算中的加法、减法和乘法相同。例如,2.1+3.6的结果是5.7;2.1-3.6的结果是-1.5;2.1*3的结果是6.3。
  双目除运算(/)和运算对象的数据类型有关。若两个对象都是整型数据,该运算称为"整除",即获得的商是整数。若商有小数,则截去小数部分。若两个运算对象有一个或两个都是实型,则运算结果是实型。例如,14/5,结果为2;而14/5.0,则结果为2.8。
  双目模运算(%)的对象必须是整型数据,结果是整除后的余数。例如,14%5的结果为4(商为2);14%4的结果为2(商为3)。注意运算结果的符号与被除数相同,例如,13%3、13%-3的结果均为1(商分别为4、-4);-13%3、-13%-3的结果均为-1(商分别为-4、4)。
  算术运算符的优先级规定如下:
   ⑴单目基本算术运算符  优先于 双目基本算术运算符
   ⑵*、/、% 优先于 +、-
   ⑶同级单目基本算术运算符的结合性是自右向左
   ⑷同级双目基本算术运算符的结合性是自左向右
  【例】基本算术运算符的使用。
   设变量定义如下:int n=10,m=3;
           float f=5.0,g=10.0;
           double d=5.0,e=10.0;
   则:-n的结果是-10
     n+m、n-m、n*m、n%m的结果分别为13、7、30、3、1
     d+e、d-e、d*e、d/e的结果分别为15.0、-5.0、50.0、0.5
     n+m-f*g/d的运算顺序相当于(n+m)-((f*g)/d),结果是3.0
     n%m*f*d的运算顺序相当于((n%m)*f)*d,结果是25.0

    2. 增1减1运算符
  增1减1运算符都是单目运算符,是用来对整型、字符型、指针型以及数组的元素等变量进行算术运算的,运算的结果仍是原类型,并存回原运算对象。用增1减1运算符和运算对象组成表达式时,运算符可以放在运算对象的前面(称前缀),也可以放在运算对象的后面(称后缀),前缀和后缀的功能略有不同。
  增1(或减1)运算符作为前缀使用时,是先对运算对象加1(或减1),然后再使用加1(或减1)后的运算对象。增1(或减1)运算符作为后缀使用时,是先使用不加1(或减1)的运算对象,然后再对运算对象加1(或减1)。

对象数名称运算符运算规则运算对象运算结果结合性
单目增1(前缀)
增1(后缀)
减1(前缀)
减1(后缀)
++
++
--
--
先加1,后使用
先使用,后加1
先减1,后使用
先使用,后减1
整型或
字符型或
指针型或
下标等
同运算对
象的类型
自右向左

  增1减1运算符的优先级如下:
  ⑴增1减1运算符 优先于 双目基本算术运算符
  ⑵
增1减1运算符和单目基本算术运算符+、-同级别,结合性是自右向左
  例如,设整型变量a为2,则:
      ++a+1 结果为4,变量a为3
      a--+1 结果为3,变量a为1
  当出现难以区分的若干个+或-组成运算符串时,C语言规定,自左向右取尽可能多的符号组成运算符。
  例如,设整型变量a、b均为2,则:
      a+++b 应理解成(a++)+b,结果为4,a为3,b不变
      a---b 应理解成(a--)-b,结果为0,a为1,b不变
  【例】增1减1运算符的使用。
   设变量定义如下:charc1='b',c2='B';(c1、c2可看成整型,其值分别为98、66)
   则:++c1的值是99,运算后c1的值是'c'
    c1--的值是98,运算后c1的值是'a'
    c1+++c2的值是164,运算后c1的值是'c',c2的值是'B'
    c1---c2的值是32,运算后c1的值是'a',c2的值是'B'

    二、关系运算符

  关系运算符是用来比较两个数据大小的,运算的结果是成立或不成立。如果成立,则结果为逻辑值"真",用整数"1"表示;如果不成立,则结果为逻辑值"假",用整数"0"表示。

?/P>

 对象数

 名称

 运算符

 运算规则

 运算对象

 运算结果

 结合性

 双目

 小于
小于或等于
大于
大于或等于
等于
不等于

 <
<=
>
>=
==
!=

 满足则为真,
结果为1
不满足为假,
结果为0

 整型

实型

字符型

 逻辑值
(整型)

 自左向右


  所有关系运算符都是双目运算符,所组成的表达式称为关系表达式。关系表达式的结果是逻辑值,若为"真"用整数1表示;若为"假"用整数0表示。
  关系运算符可以用来比较两个数值型数据的大小,也可以比较两个字符型数据的大小。字符数据比较时是按该字符对应的ASCII代码值的大小进行比较,其实质也是数值比较。
  关系运算符的优先级如下:
  ⑴ 算术运算符优先于关系运算符
  ⑵ <,<=,>,>= 优先于 ==,!=
  ⑶ <,<=,>,>= 同级,结合性是自左向右
  ⑷ ==,!= 同级,结合性是自左向右
  因此,"3<2<2"作为关系式来说是正确的,先计算"3<2"的结果为"0"(假);再计算"0<1"的结果是"1"(真)。当然,这个计算过程与原式数学中的含义(3<2并且2<1)是不同的,这一点请同学们特别注意。
  【例】关系运算符的使用。
  设变量定义如下:charc1='a',c2='A';(c1、c2可看成整型,其值分别为97、65)
           int n1=65,n2=97;
           float f1=0.3E1,f2=3.0001;
   则:c1>c2、n1<n2、f1==f2的值依次是1、1、0
     c1>=n1、c2>=n2、c1==n2的值依次是1、0、1
     f1>c1、f2<c2、f1= =n1-62的值依次是0、1、1
     c1>c2>=1<=0==1!=0的值是0   注:运算顺序相当于((((c1>c2)>=1)<=0)==1)!=0
     c1>c2>=n1<=n2==f1!=f2的值是1  注:运算顺序相当于((((c1>c2>)=n1)<=n2)==f1)!=f2

    三、逻辑运算符

  逻辑运算符是对两个关系式或逻辑值进行运算的,运算结果仍是逻辑值。在C语言中,逻辑值是用数值非0和0来表示逻辑真和假的,所以逻辑运算符也可以对两个数值型数据进行运算,包括整型、实型、字符型等数据。

?/P>

对象数

名称

运算符

运算规则

运算对象

运算结果

结合性

单目

逻辑非

 参看下表

数值型或
字符型等

逻辑值
(整型)

自右向左

双目

逻辑与
逻辑或

&&
||

自左向右

 

a非运算   !a
0(假)
非0(真)
1(真)
0(假)

 

对象1a对象2b与运算 a&&b或运算 a||b
0(假)
0(假)
非0(真)
非0(真)
0(假)
非0(真)
0(假)
非0(真)
0(假)
0(假)
0(假)
1(真)
0(假)
1(真)
1(真)
1(真)

      注意其中的&&是由2个"&"组成的,||是由2个"|"组成的。
  单目逻辑运算符(!)是前缀运算符,双目逻辑运算符是插在两个运算对象中间,所组成的表达式称为逻辑表达式。逻辑表达式的运算结果是逻辑值。若运算结果为逻辑真,则获得1;若运算结果是逻辑假,由获得0。
  要特别注意逻辑真的表示方法,对参加运算的逻辑真,是用非0值来表示的;而运算结果的逻辑真是用数值1来表示的。而对逻辑假,不管是参加运算,还是运算结果,都是用数值0来表示的。
  逻辑运算符的优先级如下:
  ⑴ ! 优先于 双目算术运算符 优先于 关系运算符 优先于 && 优先于 ||
  ⑵ 单目逻辑运算符!和单目算术运算符是同级别的,结合性是自右向左 
  ⑶ 双目逻辑运算符的结合性是自左向右
  
  !的结合性是自右向左的,即先计算最右边的!,再依次向左计算其它的!。例如,!!!10的计算顺序相当于!(!(!10)),结果为0。&&和||的结合性是自左向右的,即先计算最左边的&&(或||),再依次向右计算其它的&&(或||)。例如,10&&1&&0的计算顺序相当于(10&&1)&&0,结果为0。又如,0||0||5的计算顺序相当于(0||0)||5,结果为1。
  还要提醒读者注意的是,用&&对两个表达式进行计算时,若第一个表达式的值为"假",则运算结果与第二个表达式的值无关,结果肯定为"假",所以C语言规定此时第二个表达式将不再计算。同样用||对两个表达式进行计算时,若第一个表达式的值为"真",则运算结果与第二个表达式的值无关,结果肯定为"真",所以C语言规定此时第二个表达式也不再计算。例如定义a为整型变量,则0&&(a++)的运算结果为0,a值不变;1||(a++)的运算结果为1,a值也不变。
  【例】逻辑运算符的使用。
  设变量定义如下:charc1='a',c2='A';(c1、c2可看成整型,其值分别为97、65)
          int n1=65,n2=97;
          float f1=3.0,f2=3.0001;
  则:!c1的值是0,n1&&n2的值是1,f1||f2的值是1,!(c2>c1)的值是1,!n2>n1的值是0,f1>f2||!c1的值是0,n1+32==n2&&n1==c2的值是1。

 

原创粉丝点击