首页 > 解决方案 > 如何在 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。

标签: cbit-manipulationbitbit-shift

解决方案


要获得最低有效位,您将使用位掩码。在这种情况下,您使用10 个 1 的掩码将按位和应用于手头的数字。需要的数字可以通过位移1,然后减去1来获得。就是(1 << 10)-1在这种情况下。所以任何 x 的结果都是x & ((1 << 10)-1)

获得最高有效位更容易。您只需移开较低的位,例如x >> 10


推荐阅读