什么是位掩码?

2023-12-19

我对 C 编程相当陌生,并且遇到了位掩码。位掩码的一般概念和作用是什么?

非常感谢例子。


掩码定义要保留哪些位以及要清除哪些位。

屏蔽是将屏蔽应用于值的行为。这是通过执行以下操作来完成的:

  • 按位与运算以提取值中的位子集
  • 按位或运算以设置值中的位子集
  • 按位异或以切换值中的位子集

下面是提取值中的位子集的示例:

Mask:   00001111b
Value:  01010101b

对值应用掩码意味着我们要清除前(高)4 位,并保留后(低)4 位。这样我们就提取出了低 4 位。结果是:

Mask:   00001111b
Value:  01010101b
Result: 00000101b

掩码是使用 AND 实现的,因此在 C 语言中我们得到:

uint8_t stuff(...) {
  uint8_t mask = 0x0f;   // 00001111b
  uint8_t value = 0x55;  // 01010101b
  return mask & value;
}

这是一个相当常见的用例:从较大的字中提取单个字节。我们将字中的高位定义为第一个字节。我们为此使用两个运算符,&, and >>(右移)。这是我们从 32 位整数中提取四个字节的方法:

void more_stuff(uint32_t value) {             // Example value: 0x01020304
    uint32_t byte1 = (value >> 24);           // 0x01020304 >> 24 is 0x01 so
                                              // no masking is necessary
    uint32_t byte2 = (value >> 16) & 0xff;    // 0x01020304 >> 16 is 0x0102 so
                                              // we must mask to get 0x02
    uint32_t byte3 = (value >> 8)  & 0xff;    // 0x01020304 >> 8 is 0x010203 so
                                              // we must mask to get 0x03
    uint32_t byte4 = value & 0xff;            // here we only mask, no shifting
                                              // is necessary
    ...
}

请注意,您可以切换上面运算符的顺序,您可以先执行蒙版,然后执行移位。结果是相同的,但现在您必须使用不同的掩码:

uint32_t byte3 = (value & 0xff00) >> 8;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是位掩码? 的相关文章

随机推荐

  • 在本地的不同端口上运行 Azure Functions V3 (.NET 5)

    在以前版本的 Azure Functions 中 我曾经能够在Properties gt Debug gt Application Arguments host start port 7073 pause on error 但是 在运行 N
  • 如何在CSS中制作多边形div

    我可以在 CSS 中制作一个普通的方形 div 和一个三角形 div 但我不知道如何用单个 div 制作这样的形状 谁能帮我吗 我也希望它扩展到它的父级的整个宽度 但是border属性不支持百分比 例如border left 160px s
  • 快速检测 wifi 是否启用

    在我的应用程序中 我有一些 NSURLConnection sendAsynchronousRequest 但因此 如果用户禁用了 wifi 应用程序就会崩溃 有没有办法检测 wifi 是否被禁用 这样我就可以做类似的事情 if wifi
  • jQuery 砌体与 Wordpress 和 imagesLoaded

    我正在我正在开发的 WordPress 主题上使用 jquery masonry 在努力让它工作一段时间后 我发现 似乎对我来说工作正常 但是在 Chrome 和 Safari 中检查站点会将包含元素的底部推入以下元素 现在我在某处读到 这
  • Grails、SpringSecurity - 如果未记录则禁用重定向

    我如何配置 grails 使其在尝试访问安全资源时不将人员 用户重定向到登录页面 我只想发送 401 状态错误并重定向到主页 你要做的是配置authenticationEntryPoint 这通常可以在spring resources gr
  • 如何在Access-VBA函数中SQL连接表,选择最大值?

    我目前有以下 Access VBA 函数 其操作方式如上一个问题 https stackoverflow com questions 38898257 how to maintain uniqueness during sql join w
  • 如果存在更新否则插入

    我想知道下一段代码是否正确 SqlCommand cmd new SqlCommand IF NOT EXISTS SELECT count from Raspunsuri where id intrebare 2 Insert INTO
  • 插入 PostgreSQL

    我在 SQL 方面遇到了一点问题 我正在尝试将 2 个值插入到我的表中 这是我的查询 INSERT INTO tableinfo table date VALUES Sell 24 August 但这不起作用 我有类似的东西 SQL err
  • 通过“C#”清除临时 Internet 文件

    我在 Windows 应用程序中使用 webbrowser 控件 我正在查看 webbrowser 控件内的 url 内容 这里的 url 内容值存储在用户计算机的临时 Internet 文件中 当我单击表单中的关闭按钮时 我正在以编程方式
  • 除了 Windows 设备门户之外,还有其他方式访问 Hololens LocalAppData 吗?

    我一直遇到这个问题 当我尝试通过 Windows 设备门户将本地应用程序文件从 Hololens 保存到我的计算机时 门户需要很长时间才能下载它们并最终超时 这很令人沮丧 因为我在连接到门户时没有问题 而且我尝试下载的文件非常小 有谁知道我
  • 如何查看Python文件的汇编代码? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 出于好奇 我想查看与 py 文件代码相对应的汇编指令 您可以提出任何值得信赖的解决方案吗 The dis module https
  • 如何更新已安装的 Windows 服务?

    我用 C 编写了一个 Windows 服务 我已经将它安装在我的机器上 并且运行得很好 当您安装服务时 exe被复制到某个地方 还是它指向我的bin文件夹 这是为了让我知道 当我不时更新我的 代码时 我是否必须卸载并重新安装我的服务才能更新
  • 为什么在searchBar和tableview之间添加空白?

    我有一个表格视图控制器 我添加了搜索栏 但是当我点击 searchBar 时 searchBar 和 TableView 之间有一个空格 为什么 以及如何修复 在下面我添加了屏幕截图和代码 tableViewController 列表 感谢
  • Java 中的 JAR 级(汇编级)类范围

    在 C 中 如果我希望某个类对该程序集 DLL 中的任何类都可见 我只需将其范围设置为internal 这是默认值 我怎样才能在Java中做到这一点 在Java中 我注意到默认 内部范围是封装级别 not JAR 级别 这对我来说是一个问题
  • Python 中的图像注视点

    我希望能够在 Python 中将焦点放在图像的中心 我的输入图像可以表示为 2D Numpy 数组 我想要获得中心高分辨率但两侧模糊的输出图像 我发现了一个名为的 OpenCV 函数logplar interp为此目的 但它似乎不存在于 O
  • IOS中如何处理用户认证持久化?

    我正在尝试为我的 iPhone 应用程序和服务器构建基础 我的用户将从 iPhone 应用程序注册并登录 在正常的网站登录中 http 服务器会提供 cookie 以允许用户后续的请求保持身份验证 我应该如何在 iPhone 上处理这个问题
  • 关闭 Excel.Workbook 时出现 COMException(0x80010108 - RPC_E_DISCONNECTED)

    当我运行以下代码时 出现以下异常 NOTE ExcelApp is a Private main form variable Dim ReportBooks As Excel Workbooks ExcelApp Workbooks Dim
  • 如何在异步模式下使用 XMLHttpRequest 设置多个标头数据?

    我的 api 调用要求我在标头中传递 api 密钥 但我从 api 服务返回错误 error 2424452 message Invalid Api Key 我知道我的 api 密钥是有效的 因为我可以在 Python 中进行相同的 api
  • 如何替换 Gradle 构建产品文件中的令牌?

    我为 Gradle 设置了一个普通的构建脚本 我想做的一件事是指定我的构建版本 这是我设置的用于替换主 Java 源文件中的版本标记的代码 import org apache tools ant filters ReplaceTokens
  • 什么是位掩码?

    我对 C 编程相当陌生 并且遇到了位掩码 位掩码的一般概念和作用是什么 非常感谢例子 掩码定义要保留哪些位以及要清除哪些位 屏蔽是将屏蔽应用于值的行为 这是通过执行以下操作来完成的 按位与运算以提取值中的位子集 按位或运算以设置值中的位子集