为什么这样称呼“位掩码”?
我知道它们主要用于按位运算,并且位掩码的使用比单独变量的使用更为有效。
但是,我的问题是,为什么以及何时发明了口罩?从早期计算开始就使用它们吗?除了IT域中的位掩码之外,还有其他类型的“掩码”吗?
为什么这样称呼“位掩码”?
我知道它们主要用于按位运算,并且位掩码的使用比单独变量的使用更为有效。
但是,我的问题是,为什么以及何时发明了口罩?从早期计算开始就使用它们吗?除了IT域中的位掩码之外,还有其他类型的“掩码”吗?
Answers:
面膜(多种面部)遮盖住脸部的某些部分,并让其他部分露出来。该术语在计算中被类比使用:位掩码掩盖(过滤掉)位集中的某些位,并允许其他位通过。
除了IT域中的位掩码之外,还有其他类型的“掩码”吗?
面具就在我的头顶上,在图像处理中经常使用。这是一个类似的概念:您创建一个黑白图像,显示要掩盖的东西和允许穿过的东西的形状。
位掩码用于在公开其他位时掩盖位字段的某些位:
initial value: 011011001
bit mask.....: 111110000
result value.: 011010000
在具有逻辑门(AND,OR ...)或晶体管的电子产品或具有继电器的机电产品中进行计算之前,已使用此方法。
位掩码非常老。我没有找到第一个参考,但是它们肯定在8位处理器问世时就很流行,并且很可能也用在4位处理器中。
位掩码背后的想法是利用按位并行性。如果将8位计算机打包到一个本地字中(这意味着它可以放入寄存器中),则一次可以对8位进行相同的按位运算。
名称来自遮罩,这是掩盖您不想与之交互的区域的通用方法。例如,考虑使用该模板遮盖墙的区域(在绘画后已移动模板以显示图案)
蒙版也用于摄影中,用“闪避”代替“模板”。您可以在打印过程中使用遮罩使部分光线模糊以减轻区域的亮度。
该术语也直接用在光刻中,光刻是用于制造集成电路的技术。掩模防止光到达涂在芯片上的光致抗蚀剂,从而形成图案,这些图案随后导致芯片上的迷人图案。(下图是您好奇的Intel 8080A处理器的遮罩之一)
同样,在位屏蔽中,您要选择要操作的字的部分,以屏蔽所有其余位。在下面的示例中,我使用“和”运算来屏蔽输入,以便仅显示第3、4和8位。其余的被“屏蔽”,因此它们为0。我用的口罩是00110001
。我在下面用#
0和.
1 表示它,因为这使位掩码的视觉外观与上面的物理掩码相似,并且我显示了“选择的位”行,该行显示了输出中未被掩码的位( “选择的位”实际上并不是发生的逻辑操作……处理器实际上一步一步就从输入和掩码转到输出,但是我认为它可以澄清视觉图像)
Input 10010111
Mask ##..###. (aka 00110001)
-----------------------
(selected) 01 1
Input AND Mask 00010001
正如我所提到的,位屏蔽的历史非常悠久,因为它极大地提高了处理器的生产率。在4位处理器上,它可使处理器快4倍。在8位处理中,或者可以使其速度提高8倍(当然,仅在按位操作中)。
一种引人入胜的用途是国际象棋引擎。国际象棋棋盘有64个正方形。现代引擎具有64位整数。这是非常方便的运气,因此国际象棋引擎经常利用它。它们具有包含片段位置的所谓“位板 ”。这使您可以进行各种优化,例如一步查找所有棋子移动。
面具是英语中最普通的用法,它是一种隐藏东西的装置。丝网印刷是另一个答案。涂胶带“遮盖”某些东西以避免在其上沾上油漆,等等。PC板上的阻焊剂“遮盖”待焊接的区域与未焊接的区域。
在“位屏蔽”的情况下,某些位被“隐藏”或忽略,以便可以更轻松地操纵或简单地查看其他更受关注的位。
据我所知,最早的处理器中,位屏蔽不仅是一种“古老”的技术,而且在大多数(即使不是全部)机器指令中也是一种原始操作。通常,这是以“使用此寄存器中的位模式来掩盖某些其他寄存器中的位”的形式。
阿位掩码类似于丝网印刷。您选择一些特定的位位置以接管结果:
source value = 42 -> 00101010b
mask = 51 -> 00110011b
result 42&51 = 00100010b -> 34
掩码的另一含义是图形用户界面中的页面,用户可以在其中输入数据。
发明位屏蔽的原因有两个:
当您查看如何查看位模式时,您将通过“或”操作将其打开或将“与”操作将其关闭。
最常见的遮罩(基于位遮罩)是图像遮罩(请参阅我开头包含的链接)。
bool
与将每个标志放在单独的字节中的数组或其他某种方法相比,标志值的位图仍然是传递一组标志的一种合适且更有效的方法。这样就可以有效地执行诸如if (x & (FLAG_A | FLAG_B))
代替等操作if (xflags[FLAG_A] || xflags[FLAG_B])
。尤其是在掩码不是常数的情况下;能够通过一个掩模作为整数是多少要比通过标志的列表进行检查便宜。因此,即使内存和缓存不受限制,在某些情况下使用位集和掩码仍然会更加高效。