问题描述
我正在尝试从 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