全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
这一次看一下位操作的章节。
如果是逻辑位操作其实不需要考虑大小端。
1. 移位操作在快速乘除法中经常用到。
2. 这里提到了一个算是移位,其实跟前面的基础移位是相同的。
1. 循环移位,这个大学的时候也是接触使用过的。但是到了工作之中用的很少了。
2. 下面这个算法用来实现计算二进制中有多少个1,countingbits。
关于位操作有按照位执行的与或非以及亦或操作。
这里列出了很多位操作的例子,而这些例子在嵌入式中很常见。我觉得,类似的操作直接用高级语言编写可能得到的汇编不会有什么效率损失,因为操作映射太直接了。
这里接下来就提到了高级语言中的位操作,这里提到的是C语言。而这部分功能,我在工作的多年中的确是非常频繁使用过。
在使用应用案例中提到了UNIX,或者说POSIX中文件权限属性的操作。这个操作的实现,使用的其实就是位操作。
1. 大小端判断程序,比较简单。我考虑不出来什么时候我会用到,但是倒是也可以收集到我的工具箱中,这样的辅助功能对于写出通用软件来说比较有帮助。
2. TCP/IP的数据包结构中就包含有按照大端存储的信息,如果遇到类似的处理,需要考虑数据转换。
类似的设计好巧妙,也是用来实现counting bits功能。相比逐个遍历来说,效率的确有了很大的提升。然而这个也不是全部,后面接着提出来的算法,其中有一个hacker_popcnt的算法就是一个更优解。而其核心处理手段就是位操作。我把它纳入到了我的工具箱中:GreyZhang/c_units: A small piece of code which can be reuse anywhere, I call it a unit. This is a collection of unit in C language! Ok, yes, it would be my toolbox. (github.com)
看起来,类似的知识已经越来越脱离PC的汇编主题了。后面的阅读速度应该加快推进了。