C语言位运算及其应用


categories:

  • C语言

位运算符

位运算符允许对一个字节或更大的数据单位中独立的位做处理:可以清除、设定,或者倒置任何位或多个位。也可以将一个整数的位模式(bit pattern)向右或向左移动,针对的是二进制。
在这里插入图片描述)在这里插入图片描述
注意:<<左移运算符最右边补0,>>右移运算符最左边补符号位,(记忆这两个符号方法:箭头朝哪一边就是哪一边移)

位运算应用
下面数据x设为1字节,即8位

去掉最后一位 : (101101->10110) 算法 x >> 1

在最后加一个0:(101101->1011010) 算法 x << 1

在最后加一个1:(101101->1011011) 算法 (x << 1)|1

把最后一位变成1: (101100->101101) 算法 x | 1

把最后一位变成0:(101101->101100) 算法 (x | 1)-1

最后一位取反:(101101->101100) 算法 x ^ 1

把右数第k位变成1:(101001->101101,k=3) 算法 x | (1 << (k-1))

把右数第k位变成0: (101101->101001,k=3) 算法 x & ~(1 << (k-1))

右数第k位取反: (101001->101101,k=3) 算法 x ^ (1 << (k-1))

取末三位: (1101101->101) 算法 x & 7
注:7的二进制为0000 0111,x&7即可取末三位

取末k位: (1101101->1101,k=4) 算法 x & ((1 << k)-1)

取右数第k位: (1101101->1,k=4) 算法 (x >> (k-1)) & 1

位运算方法总结

1.确定符号,变1:|1;变0:&0;取反:^1
2.确定数字
3.构造数字
例如:在这里插入图片描述
例题:统计一个字节数据二进制1的个数
在这里插入图片描述

全部评论

相关推荐

点赞 评论 收藏
分享
运营你豪哥:1.模板换一个,现在的模板基础信息加个照片已经占了30%的空间。 2.实习经历的描述,按时间倒序标注清楚,选2-3段和你求职意向契合的经历填写。 3.自我评价再改改,要不就删了;怎么感觉自我评价是在介绍你专业的培养体系,看不出重点要突出什么。
听劝,这个简历怎么改
点赞 评论 收藏
分享
机智的大学生这就开摆:有些地方描述有点儿空泛。传感器直接说清是哪款,要不然对方都不知道问啥。然后freertos那里的描述也是,加上freertos就实现了实时性吗?可以说基于freertos的调度,结合xxx优化/xxx技术实现了xxx检测的实时性。同时freertos也能实现异步io,也能实现灵活的并行架构和高并发。 检测时效性的问题要考虑哪里需要时效性,摔倒检测需要通过中断实现,至于温度这种大惯量就不需要,方案细节理清楚。然后freertos那里提升响应速度用的消息队列不是太合适,可以说是用的notify反正和消息队列差不多,或者说指针传参来优化消息队列的值传递进而提升线程间通信效率。 但凡是搞过开发的看一眼你的简历就知道有问题了,需要重新整理技术路线优化一下。首先搞清楚技术路线,描述好软硬框架,体现性能优化/低功耗等。例如后续针对xxx功能进行了xxx的优化,实现了xxx成果(这里可以展开描述你使用的工具链,你是用的串口调试助手还是RTT来打印日志,有没有用systemview来优化任务的优先级大小避免乱序调度,或者使用了Ozone调试定位问题等)。 描述问题上例如视觉项目那里,基于xxx通信接口编写xxx传感器的驱动,实现了xxx功能,并提供了xxx数据处理/稳定性/精确度/异步调用。或者也可以统一描述为基于xxx、xxx、xxx通讯协议编写xxx、xxx、xxx传感器的驱动。后续再单独给这些传感器的数据处理/优化等进行描述。 最重要的一点,实习栏太少了,五六个月不至于只干了这么点,把实习项目描述清楚,把自己会的不管有没有让你做都写进去。你写了实习这栏,内容就不能比剩下的两个项目差多少了。 最后就是看看岗位jd,跟着描述修改你的专业技能以及项目的描述,这样被回复的概率才大。 希望你早日找到理想工作!祝好
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务