c - 如何在 C 中获得 16 位无符号短路的 MSB 和 LSB?
问题描述
我正在尝试从 16 位无符号短返回 10 个最低有效位(同时将 6 个最高有效位设置为 0)和 6 个最高有效位(同时将 10 个最低有效位设置为 0)我被卡住了关于如何做到这一点。例如,如果我有一个 unsigned short 0x651A
,那么位表示将是:
// MSB LSB
// +-----------+-------------------+
// |0 1 1 0 0 1|0 1 0 0 0 1 1 0 1 0|
// +-----------+-------------------+
// | | |
// bit offset: 16 10 0
因此,如果我要获得 6 个最高有效位,那么返回的 short 将是0b0000000000011001
. 我对 C 语言非常陌生,我仍在尝试理解位管理和位移。感谢任何建议或反馈,以帮助我更好地理解 C。
解决方案
要获得最低有效位,您将使用位掩码。在这种情况下,您使用10 个 1 的掩码将按位和应用于手头的数字。需要的数字可以通过位移1,然后减去1来获得。就是(1 << 10)-1
在这种情况下。所以任何 x 的结果都是x & ((1 << 10)-1)
。
获得最高有效位更容易。您只需移开较低的位,例如x >> 10
推荐阅读
- node.js - 从 Node 查询 MariaDB 时结果中的字符编码不一致
- python - 在 Python 中调用要返回的对象的方法时应该使用什么返回语法?
- ruby-on-rails - 基本 Rails 搜索不呈现结果
- azure-cognitive-search - Azure 搜索和必应搜索有什么区别以及何时使用?
- google-compute-engine - 如何仅允许某些 google-cloud-functions 访问
- html - 如何创建代码块,这是一种在我的网站上显示我的代码的好方法,因此人们也可以复制代码
- tinybutstrong - 如何在条件为空值的情况下获得 tinybutstrong 合并块
- github - 有没有办法检索语言已更改的 Github 存储库?
- javascript - 使用 Jquery 提交的 Mocha 单元测试
- oracle - sysdate 正确时如何将值插入表中