掩码
掩码 | |
---|---|
术语名称 | 掩码 |
英语名称 | mask |
别名 | 掩膜, 位掩码, bit mask, bitmask |
通过位运算“屏蔽”或“留下”数据的某些指定位的操作称为掩码(masking/bitmasking)。 这一操作通过与按特定格式构造出的数据进行按位与实现,这个特定数据也被称为掩码(mask / bit mask)。 有时,通过这个掩码数据进行位设置、位清除、位反转的操作也被称为掩码操作。
定义
对二进制串 [math]\displaystyle{ b_1 b_2 \cdots b_n }[/math] ,若仅需要保留其中下标为 [math]\displaystyle{ j_1 j_2 \cdots j_r }[/math] 的位,并将其余的二进制位全部变成 0 ,可以构造二进制串 [math]\displaystyle{ m_1 m_2 \cdots m_n }[/math] ,其中 [math]\displaystyle{ m_i = \begin{cases} 1, i \in \{j_1,j_2,\cdots,j_r\} \\ 0, i\notin \{j_1,j_2,\cdots,j_r\} \end{cases} }[/math] ,令两二进制串进行按位与,则结果即为所需二进制串,这一操作称为掩码(masking/bitmasking)操作,构造出的二进制串 [math]\displaystyle{ m_1 m_2 \cdots m_n }[/math] 称为掩码(mask / bit mask / bit mask)。
注:掩码只是一种被构造的数据,其本质是要选中一些位。掩码操作本质上是仅保留这些选中的位,屏蔽其他的位。
注:也有的定义中掩码操作是仅屏蔽这些选中的位,保留其他的位。
使用
掩码操作通常指直接与掩码进行按位与操作,保留选中的位置并屏蔽其他的位的操作。进行掩码操作后,有两种情况,可以与 0 比较判断是否这些位全部是 0 ,或者与掩码本身比较判断是否这些位全部是 1 。
以下操作也需要使用掩码,因此也有人视其为掩码操作。
位设置:与掩码进行按位或运算,其结果表示将选中的位全部置 1 ,保留其他的位。
位清除:与掩码按位取反结果进行按位与运算,其结果表示将选中的位全部置 0 ,保留其他的位。
位反转:与掩码进行按位异或运算,其结果表示将选中的位全部反转,保留其他的位。
衍生
IP 协议中每个 IP 地址中有一部分二进制位代表当前子网,子网掩码就是指定了这部分二进制位的掩码。
对二值图像的像素点进行位运算操作,可以设置、取消、反转指定的部分像素,这也称为 mask ,译作掩膜或遮罩层。 与掩膜不同,对灰度或彩色图像,图像的掩膜和遮罩层中每个像素点的取值可以不是二值的,通过类似模糊逻辑的方式作用于不同的数值。
处理中断时,用于屏蔽或通过某些位的中断掩码,就是选中了允许通过部分的掩码。
位运算 | ||
---|---|---|
按位运算 | 按位运算 | 按位取反、按位与、按位或、按位异或 |
特殊情况 | 掩码、位设置、位清除、位反转 | |
移位运算 | 算术移位 | 算术左移、算术右移 |
逻辑移位 | 逻辑左移、逻辑右移 | |
循环移位 | 循环左移、循环右移 |
琐事
名称
一说“掩码”(mask)的词源是打孔卡片或打孔纸带机时代用于遮挡纸带指定位的额外卡片,通过遮住部分位的传感器,使得这些位被置为 0 ,仅继续取剩余的位。因此其中通过是 1 ,未通过是 0 。这种额外卡片字面地被称为遮罩(mask)、掩盖。后来被沿用到了二进制数据运算中。只是对于这种抽象的运算,现在翻译成掩码,即用于掩盖一些位的数码,或掩膜,即图像上掩盖一些像素点用的遮罩层。