如何在 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 个最高有效位,那么返回的短路将是 0b0000000000011001。我对 C 很陌生,我仍在努力了解位管理和位移位。感谢任何建议或反馈,以帮助我更好地理解 C。

解决方法

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

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