Sierpiński三角形?在我的位运算中?
Hacker News 摘要原标题:Sierpiński Triangle? In My Bitwise and?
这篇文章探讨了一种独特的位运算技巧,灵感来源于1980年代的极客文化,主要关注Sierpiński三角形的生成。作者非常热爱C语言,同时介绍了与C语言相关的“位运算黑客”技术,这是一种使用位逻辑运算实现复杂算法的挑战。这些技术常常被认为是代码优化手段,更多的是为了炫耀而不是实用。
文章回顾了分形的概念,Sierpiński三角形是一个著名的分形,通过重复删除形状中央的一部分来构建。每次迭代,表面积减少25%,而周长却增加50%,导致最终的面积极限为0,周长极限为无穷大,尽管整体形状保持不变。
接下来,文章展示了一个简单的位运算代码示例,该代码利用位运算生成Sierpiński三角形。通过遍历一对整数坐标x和y,根据位与操作x & y的结果来决定每个单元的颜色。
在这个程序中,通过将计数器x和y都从0到63的范围内迭代,可以看到产生了一个Sierpiński三角形的有趣图案。扩展计数器的范围将产生更多细节,形成更精细的分形图案。虽然位运算看似复杂,但作者指出,真正的魔力来自于数位系统的位置特性。
在文章中,通过可视化二进制计数,作者解释了最重要的位如何影响二维绘图,在每个维度上进行划分,并展示了如何通过位运算生成该三角形的不同部分。随着更多位的处理,程序显示了各个部分的开关状态,从而逐步构建出形状。
最终,作者总结称,该算法实际上是一种迭代的块移除方法,利用CPU的算术逻辑单元并行处理这个过程,从而使得生成Sierpiński三角形的技巧既简单又高效。
原文:https://lcamtuf.substack.com/p/sierpinski-triangle-in-my-bitwise