• objective-C和C --- 《位运算》的使用(一)


    int a= 1 << 0     // 向右偏移2的0次方,返回01
    int b= 1 << 1    // 向右偏移2的1次方,返回10
    int c= 1 << 2    // 向右偏移2的2次方,返回100
    int d= 1 << 3   // 向右偏移2的3次方,返回1000
    
    int value = a|b ; //表明value中包含a或者b
    //&表示包含
    printf(@"%d%d%d%d",value&a,value&b,value&c,value&d)
    
    //打印结果:1 2 0 0,如果返回原来的数值则表示包含,返回0表示不包含,因为value为1111(a+b),0011 与 01 ->(0001,注:1与1才为1,否则都为0),0011 与 10  ->(0010,注:1与1才为1,否则都为0),上面两个都是返回自己本身,所以表示包含,再看看下面两个,0011与0100 ,返回  0000,0011与1000,返回
    0000,所以下面两个都返回0,不包含
    

     下面参与与运算

        // value  0011     value  0011
        // a      0001       b    0010
        //结果     0001      结果   0010
        
        // value  0011     value  0011
        // c      0100       d    1000
        //结果     0000      结果   0000
    

     测试代码如下

    int a= 1 << 0;     // 向右偏移2的0次方,返回01
    int b= 1 << 1;    // 向右偏移2的1次方,返回10
    int c= 1 << 2;    // 向右偏移2的2次方,返回100
    int d= 1 << 3;   // 向右偏移2的3次方,返回1000
    void test(int value);
    void main(){
     int value = a|b ; //表明value中包含a或者b
         test(value);
    }
    void test(int value){
        if(value & a) printf("value包含了a
    ");
        if(value & b) printf("value包含了b
    ");
        if(value & c) printf("value包含了c
    ");
        if(value & d) printf("value包含了d
    ");
    }
    
    得出结论,之后如果使用枚举时,如果返回多个值可以用位运算来实现,否则只能返回一个数值
    
    将来的自己,会感谢现在不放弃的自己!
  • 相关阅读:
    算法练习-寻找和为定值的两个数
    算法练习-字符串全排列
    算法练习-最长回文子串
    判断一点是否在三角形的外接圆内
    用递归方法计算行列式的值
    算法练习-回文判断
    算法练习-字符串转换成整数(实现atoi函数)
    算法练习-字符串包含
    数据结构-队列
    结构体(或者联合体)变量的成员在内存里是如何分布的
  • 原文地址:https://www.cnblogs.com/TheYouth/p/6528884.html
Copyright © 2020-2023  润新知