• C语言学习笔记(七)——其它运算符


    

    第七章                          其它运算符

     

    逗号运算符

             逗号运算符:即顺序点,逗号前先运行。后再运行。

             for循环的运行次数:

                       for(i=n; i<m; ++i) //for循环共运行了m-n次。当m-n<0时,即for循环一次也不运行。

                       for(i=n; i<m; i+=k)//for循环共运行了(m-n)/k次,当有小数时。向前进1。当m-n<0时,即        for循环一次也不              运行。

     

     

    三目(元)运算符

                       格式:A ? B : C;

                       由三部分组成,由问号?和冒号:隔开,A成立。运行BA不成立,则运行C

             等价于:

                       if(A)

                           B;

                       else

                           C;

     

    自增运算符

                 前自增:++i  (i1后的值,即i+1)

                 后自增:i++ i1前的值。即i

                 前自减:--i  (i1后的值,即i-1)

                 后自减:i-- i1前的值。即i

    注意:

             1、编程时应该尽量屏蔽掉前自增(减)和后自增(减)的差别;

             2i++ ++i 应该单独成一个语句。不要把它作为一个完整复合语句的一部分来使用

             如:

                       intm = i++ + ++i + i + i++;  //这样写不可是不规范的代码,并且是不可移植的代码

                  printf("%d %d %d", i++, ++i,i);  //这样写不可是不规范的代码。并且是不可移植的代码

             即在 int m = i++ + ++i + i + i++;中,i的值是否添加,在i++++i中是否已经改变是不清楚的。

             有关顺序点的问题

             顺序点:逗号:, 括号:(表达式) 分号:;

             加号+不是顺序点。不知其i++是否已经计算生效

            

    # include <stdio.h>

     

    int main(void)

    {

             inti, j, k, m;

            

             i= j = 3;

             k= ++i; //计算后i = i + 1,即结果i值加1

             m= j++; //计算后j = j + 1,即结果j值加1

            

             printf("i= %d, j = %d, k = %d, m = %d ", i, j, k, m);

            

             return0;

    }

    /*

             结果:

             i= 4, j = 4, k = 4, m = 3

             Pressany key to continue

             总结:

             前自增与后自增

                       同样处:都是使ij的值加1。即i = i + 1, j = j + 1;

                       不同处:前自增总体表达式的值是i1之后的值,即先计算 ++,值为i+1;

                                后自增总体表达式的值是i1之前的值。即值为i;

    */

     

    位运算符

             & -- 按位与    && -- 逻辑与。也叫而且)

                       k= i & j; //表示将两个数的二进制代码相应的每一位都进行与操作

                       运算法则:

                                1&1= 1

                                0&1= 0

                                1&0= 0

                                0&0= 0 //每一位与1相与还为原数,与0相与全为0,可依此来推断一个数据每一位的数字。

             | -- 按位或     || -- 逻辑或,也叫或者)

                       k= i|j; //表示将两个数的二进制代码相应的每一位都进行或操作

                       运算法则:

                                1|1= 1

                                1|0= 1

                                0|1= 1

                                0|0= 0 // 仅仅有当两位全为0时结果才为0

             ~ -- 按位取反

                       ~i表示把i的变量的所有二进制代码所有取反(包含用于补齐的01)。

             ^ -- 按位异或

                       运算法则:同样为0,不同为1

                                1^1= 0

                                1^0= 1

                                0^1= 1

                                0^0= 0

             << -- 按位左移

                       即将有效数字位左移。左移n位相当于乘2n次方。

    (二进制即乘2n次方,十进制就是乘10n次方。如小数点的移动)

                       i<<3表示把i的二进制代码左移3位,右边补0

                       面试题:

                                Ai = i*8;

                                Bi = i<<3;

                                请问上述两个语句,哪个语句的运行速度快?

                                答案:B快。 由于A语句要动用硬件的乘法器进行乘法运算,B仅用位运算器就可以。

             >> -- 按位右移

                       即将有效数字位右移,右移n位相当于除以2n次方。进行位运算前提是数据不能丢失。

                       i>>3表示把i的二进制代码右移3位,左边正数补0,负数补1

             位运算的意义:通过位运算符我们能够对数据的操作精确到每一位,若不用位运算仅仅能精确到字节。

  • 相关阅读:
    杀毒软件工作原理
    IP地址
    网络操作系统功能和基本任务
    计算机网络技术知识点总结
    对称密钥密码体制的主要特点
    无线局域网(WLAN)
    文件传输协议(FTP)
    万维网(WWW)
    简单网络管理协议(SNMP)
    防火墙技术
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6815743.html
Copyright © 2020-2023  润新知