什么是位掩码?

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(使用前将#替换为@)

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

  • 数字或货币的字符串格式?

    我需要为每个千给出逗号 所以我用了DataFormatString 0 它运行良好 但当值为0 它正在显示 00 我只想只显示 0 我们怎样才能做到这一点 DataFormatString 0 C0 这将格式化为小数点后 0 位的货币 Da
  • 异步提交或回滚事务范围

    正如许多人所知 TransactionScope当async await Net 中引入了模式 如果我们尝试使用一些它们就会损坏await在事务范围内调用 现在这个问题已经解决了 感谢范围构造函数选项 a 17527759 1178314
  • 以编程方式获取命名管道的系统名称

    我正在使用 WCF NetNamedPipeBinding 编写进程间通信 我的目标是让服务在 net pipe localhost service 上运行 所以我运行最简单的主机 host new ServiceHost contract
  • 隐式将 string 转换为 string_view

    void Foo1 string view view string str one two three Foo1 one two three Implicitly convert char to string view Foo1 str I
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • 如何使用c#/VB.NET在word中插入书签

    我正在尝试使用 C 在 Word 文档中添加书签 但它不起作用 而且我在 msdn 文档和互联网上都找不到任何帮助 这就是我正在尝试做的事情 我正在阅读 Word 文档 然后在该文档中搜索关键字 然后将该文本转换为超链接 效果很好 现在 我
  • 当假设 [[assume]] 包含 UB 时会发生什么?

    在 C 23 中 assume expression 属性使得如果表达 is false 行为未定义 例如 int div int x int y assume y 1 return x y 这会编译成相同的代码 就像y一直是1 div i
  • 如何使用 LINQ 对列表的列表进行分组(例如:List>)

    我知道我可以使用一些 for 循环轻松地做到这一点 但想看看是否有一种方法可以使用流畅的 LINQ 来做到这一点 我试图找出每个子列表中有多少个 我在看Enumerable SequenceEqual http msdn microsoft
  • MPI_Gather 分段错误

    我有这个并行高斯消除代码 调用以下任一方法时会发生分段错误MPI Gather函数调用 我知道如果没有为任一缓冲区正确分配内存 可能会出现此类错误 但我看不出内存管理代码有什么问题 有人可以帮忙吗 Thanks Notes 该程序从一个 t
  • esp8266互联网交换机问题

    我正在尝试制作一个门继电器开关系统 我可以通过端口转发从任何地方进行操作 我找到了一个非常有用的指南和代码 我的程序基于 https openhomeautomation net control a lamp remotely using
  • 如何使用 Unity 动态注册通用类?

    我有一个包含很多类 300 和 BaseClass 的程序集 我想用接口注册一个泛型类 统一后 您必须在 Name如果你想解析接口的对象数组 我想要一个对象数组主视图模型自动地 有没有办法通过反射来自动执行此操作 有什么建议么 示例 伪 p
  • 确定所选电子邮件是来自收件箱还是已发送邮件

    我正在编程Outlook 插件并需要确定所选电子邮件是否来自Inbox or Sent Items这样当我将电子邮件保存到数据库中时 我可以使用文件夹 收件箱 或 已发送 来标记电子邮件 我知道我可以将文件夹名称与 收件箱 或 已发送邮件
  • Visual Studio 扩展找不到所需的程序集

    我为 Visual Studio 2013 编写了一个扩展 因为该死的组合框错误 https stackoverflow com questions 7800032 cancel combobox selection in wpf with
  • MonoMac 窗口关闭时没有错误

    我刚刚开始在 Xamarin Studio 中使用 MonoMac 并且遇到了最奇怪的问题 我有一个带有 NSButton 和 NSTextField 的窗口 至此 我已经删除了按钮上的事件处理程序 因此它不会执行任何操作 除了在单击它时突
  • 如果未先将 lambda 表达式强制转换为委托或表达式树类型,则无法将其用作动态分派操作的参数

    我正在使用 NET4 5 和 VS2013 我有这个查询dynamic来自数据库的结果 dynamic topAgents this dataContext Sql select t create user id as User sum t
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • 如何让浏览器后退按钮通过 AJAX 调用带您返回?

    我有一个页面 上面有很多动态生成的复选框 当用户单击这些复选框时 页面上的许多内容会通过 ajax 动态更改 最终用户抱怨 在点击提交然后点击后退按钮更改某些内容后 他们的选择被破坏了 他们必须重新做一遍 我见过一些网站 gmail fac
  • 同时使用多个控制台

    是否有捷径可寻 我现在仅使用控制台测试我的网络应用程序 最好的办法是从一个项目中拥有多个控制台 然后按一下 立即调试 菜单项 我可以像过去一样使用多个项目 但这似乎很笨拙 理想情况下 我可以启动多个控制台实例 从同一线程运行很好 并且让它们
  • C++ 中带逗号的表达式的执行顺序 [重复]

    这个问题在这里已经有答案了 我的理解是这个词j i将在之前执行 i在声明中 j i i C 标准是否保证j i将在之前执行 i在循环 for auto i std next begin j begin i end j i i 逗号运算符引入

随机推荐

  • 在本地的不同端口上运行 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 编程相当陌生 并且遇到了位掩码 位掩码的一般概念和作用是什么 非常感谢例子 掩码定义要保留哪些位以及要清除哪些位 屏蔽是将屏蔽应用于值的行为 这是通过执行以下操作来完成的 按位与运算以提取值中的位子集 按位或运算以设置值中的位子集