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\n");
if(value & b) printf("value包含了b\n");
if(value & c) printf("value包含了c\n");
if(value & d) printf("value包含了d\n");
}
得出结论,之后如果使用枚举时,如果返回多个值可以用位运算来实现,否则只能返回一个数值
将来的自己,会感谢现在不放弃的自己!

浙公网安备 33010602011771号