C语言学习笔记(5)——运算符

  人类使用计算机最初的目的就是为了计算,计算机能快速的完成大量的计算以及完成一些重复性的劳动。为了计算,我们引入了变量和常量,但这是远远不够的。我们需要引入运算符来帮助我们进行变量和常量之间的运算。

  谈起运算符,大概可以分为以下几种:(1)赋值运算符(=);

                   (2)算数运算符(+,-,*,/,+=,-=,*=,/=,%,++,--);

                   (3)关系运算符(>, <, <=, >=, ==, !=); 

                   (4)逻辑运算符(&&, ||,! );

                   (5)位运算符(<<, >>, ~, |, ^, &);

                   (6)条件运算符(? :);

                   (7)逗号运算符(,);

                   (8)指针运算符(*,&);

                   (9)求字节数运算符(sizeof);

                   (10)强制类型转换运算符((类型名));

                   (11)分量运算符(. , ->);

                   (12)变址运算符[ ](也叫下标运算符);

                   (13)函数调用运算符( )(对,没错,这个()也是运算符);

  相信大多数人第一次看见这些运算符时,和笔者的心情是一样的,会感慨C语言实在是太强大了,竟然会有这么多运算符,根本无从下手。其实这些运算符是对c语言里大部分运算符的一个总结,作为初学者,我们只需要了解(1)到(4)的运算符有什么作用和特性就可以了,后面的运算符。会在之后的内容里接触到。当然,如果想拔拔高的话,也可以了解一下(5),(6),(7)的内容。

  下面,笔者会逐个分析(1)到(7)中的运算符 

  (1)赋值运算符:在这里引入两个概念,左值和右值。其实意思很简单,左值就是赋值号左边的值,右值就是赋值号右边的值。赋值运算符的作用是将右值赋值给一个变量,在这里需要注意的是:右值可以是变量,也可以是常量,但是左值之只能是一个变量。

  (2)算数运算符:+,-,*,/,有小学学历的人,不难明白它们是什么意思。需要解释的应该是+=,-=,*=,/=以及++和--。为了方便解释这几个运算符的作用,我们引入两个整形变量(int)i,j;并且它们的初值都是0;

     +=:i += 1在算术运算上等价于i = i + 1;-=,*=,/=和+=是相似的。

     运算符++读作自增运算符,相应的,--读作自减运算符。执行++i和i++是没有区别的,这两种运算都是给i加1,那么,它们的区别在哪里呢?在赋值的时候。

     ++和--是自增和自减运算符,意思是自己给自己加1,那么,在什么时候给自己加1呢?++i,这个++在i前面,表示在赋值给一个变量之前,给自己加1。相应的i++,++在i后面,表示在赋值给一个变量之后,给自己加1。

  (3)布尔值:在确定一个表达式以后,那么它有且只有一个布尔值。布尔值只有两种,true或false。一般情况下,我们把0记为false,把1记为true。所以1和true是等价的,0和false是等价的。确定布尔值的一个方式是判断表达式的值是否为0,表达式值为0的情况下,布尔值为false,其它情况下,布尔值都为true。

  (4)关系运算符,在这里,需要解释的应该是==和!=。

     ==:判等运算符,作用是判断两个表达式的值是否相等,若相等,返回true,若不等,返回false;

     !=:判不等运算符,作用是判断两个表达式的值是否不等,若相等,返回false,若不等,返回true;

  (5)逻辑运算符,

    a:&&(逻辑乘),对运算符左右两边表达式的布尔值进行逻辑与运算,之后返回一个布尔值,需要注意的是,当&&左边的表达式布尔值为false时,与运算的返回值一定是false,所以,&&不会对&&右边的表达式进行运算。  

       b:||(逻辑加),对运算符左右两边表达式的布尔值进行逻辑或运算,之后返回一个布尔值,需要注意的是,当||左边的表达式布尔值为true时,或运算的返回值一定是true,所以,||不会对||右边的表达式进行运算。

    c:!(逻辑非),对运算符右边的表达式的布尔值进行逻辑非运算,之后返回一个布尔值。

  (6)位运算符(&,|,~,^,<<,>>)

      这里的位是二进制位,位运算,是针对二进制数的运算。为了方便理解位运算,我们使用几个例子来表达这些概念。十进制数3对应的二进制数为011,4对应的二进制数为100;

     按位与(&),3&4的结果为0,&将3和4的每一个位对齐,然后按位进行逻辑与运算,返回0;

     按位或(|),3|4的结果为111,即7,|将3和4的每一个位对齐,然后按位进行逻辑或运算,返回7;

     按位取非(~),~3的结果是100,即4,~4的结果为011,即3;原理同上。

     按位异或(^),3^4的结果是111,即7。原理同上。异或运算的应用之一就是不使用中间变量交换两个变量的值。所以,交换两个变量值的代码也可以写成x = x^y,y = y^x,x = x^y; 

  (7)条件运算符:我们可以使用条件运算符求两个数中的最大值,在这里,我们引入两个整形变量a = 3和b = 4。a>b ? a : b,这个表达式的意思是若a大于b则返回a,否则返回b。所以可以这样总结条件运算符。

    (表达式1)?(表达式2):(表达式3),如果表达式1的布尔值为true,返回表达式2,表达式1的布尔值为false,返回表达式2。

  (8)逗号运算符(,),我们引入两个整型变量a = 3,b  = 4。(a,b)的返回值为4,即b的值。所以,我们可以这样总结逗号运算符(表达式1,表达式2)返回表达式2。

  了解和掌握运算符的作用与特性可以帮助我们写出效率和健壮性都比较好的程序,这是必须要掌握的内容。

 

             

 

                       

                  

posted @ 2018-10-19 18:44  陌小路  阅读(1067)  评论(0编辑  收藏  举报