zoukankan      html  css  js  c++  java
  • 第16课 位运算符分析

    C语言中的位运算符:

    C语言中的位运算效率是最高的。比四则运算效率高很多。

    左移和右移:

    右操作数超出范围后,行为是不确定的。

    有趣的问题:

    示例程序如下:

    运行结果如下:

    从结果可以看出,第8行的混合运算先算的是加法。

    vc编译器的输出结果如下:

    bcc编译器的输出结果如下:

    小贴士:

    交换两个变量的值:

     1 #include <stdio.h>
     2 
     3 #define SWAP1(a, b)    
     4 {                      
     5     int t = a;         
     6     a = b;             
     7     b = t;             
     8 }
     9 
    10 #define SWAP2(a, b)    
    11 {                      
    12     a = a + b;         
    13     b = a - b;         
    14     a = a - b;         
    15 }
    16 
    17 #define SWAP3(a, b)    
    18 {                      
    19     a = a ^ b;         
    20     b = a ^ b;         
    21     a = a ^ b;         
    22 }
    23 
    24 int main()
    25 {
    26     int a = 1;
    27     int b = 2;
    28     
    29     
    30     printf("a = %d
    ", a); 
    31     printf("b = %d
    ", b); 
    32     
    33     SWAP3(a ,b);
    34     
    35     printf("a = %d
    ", a); 
    36     printf("b = %d
    ", b); 
    37     
    38     return 0;
    39 }

     SWAP1会借助于第三个变量,SWAP2会有隐患,a或者b非常大的时候会造成溢出。

    运行结果如下:

    位运算与逻辑运算:

    示例如下:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int i = 0;
     6     int j = 0;
     7     int k = 0;
     8     
     9     if( ++i | ++j & ++k )
    10     {
    11         printf("Run here...
    ");
    12     }
    13     
    14     return 0;
    15 }

    运行结果如下:

    这里的++i,++j,++k都会得到执行,因为它们之间使用的是位运算符,没有短路规则。

    小结:

  • 相关阅读:
    maven
    Web开发入门
    网络编程之Socket
    自定义注解与设计模式
    数据交换格式与SpringIOC底层实现
    caffe笔记之例程学习(二)
    caffe笔记之例程学习
    ubuntu14.04 caffe环境配置
    Pattern Recognition (Fourth Edition)读书笔记之mvnrnd函数
    MIF文件编写小技巧
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9535770.html
Copyright © 2011-2022 走看看