(已解决)C语言中“按位运算”的应用都有哪些?
如题,正在学习C语言,其中有个知识点是按位运算,跟着书上的介绍和动手去写示例程序明白白其中的原理了。就是对存储在内存中的一个或两个值的位进行运算,也会对两个值进行按位与、按位或、取反等的操作。
自己一点粗略的理解是通过对内存的直接操作可以节省资源提高效率。
请问这个知识点的应用点是在哪里?比如:最常用在什么场景中,大概哪类程序中?再能举几个例子最好拉。
补充:感谢大家的热心回答,基本能解除我的疑惑了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
比如有一个8位二进制整数,每一位的1代表通电,0代表断电,我们要让8个开关挨个通断电就需要用位运算了,可以去找单片机的代码看看
如果用位移来计算,最好交给编译器优化,如x<<12,比如直接x*1024.
位常用的一个就是标志位,比如一个功能有哪些特性,可以用位来表示。
如
flag1=0x1
flag2=0x2
flag3=0x4
flag4=0x8
if(flag&flag3){
....
}
位运算的意义在于运行效率通常比加减乘除高几倍到几十倍,在很关心速度的算法中常常会采用,例如很多比较底层的算法。缺点是可读性和可维护性差。例子可以看这个网页:https://graphics.stanford.edu/~seander/bithacks.html
此外,用整数表示集合,用位运算进行集合操作,也是一种常见的用法。
认同 @__simple 的说法,单片机中的置位(1)和清零(0)可以通过与另外一个量来运算取得
总的来说,为运算节省空间,速度快,应用的例子有
1.位图索引。比如说qq号或电话号码的去重和查询;
2.位掩码。典型的是linux文件权限;
3.生成伪随机数;
4.格雷码
用来设置对象的属性
例如在给单片机写代码时,要给某个寄存器赋值,使用按位运算显然要简单高效。
比如一个三十二位的数,每一位代表一种中断,那么去清零某一位就是用与,如果要置位某一位就用或。
可以用移位的运算优化效率,可以用1bit的空间做flag