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
");
}
得出结论,之后如果使用枚举时,如果返回多个值可以用位运算来实现,否则只能返回一个数值
将来的自己,会感谢现在不放弃的自己!
原文地址:https://www.cnblogs.com/TheYouth/p/6528884.html