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

1
2
3
4
5
6
7
8
9
10
11
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,不包含

 下面参与与运算

1
2
3
4
5
6
7
// value  0011     value  0011
// a      0001       b    0010
//结果     0001      结果   0010
 
// value  0011     value  0011
// c      0100       d    1000
//结果     0000      结果   0000

 测试代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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");
}

 

1
得出结论,之后如果使用枚举时,如果返回多个值可以用位运算来实现,否则只能返回一个数值

 

posted @   TheYouth  阅读(186)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示