如何在 C 中获取 16 位无符号短整型的 MSB 和 LSB?
How do I get the MSB and LSB of a 16 bit unsigned short in C?
我正在尝试 return 从 16 -bit unsigned short,我一直在研究如何实现这一点。例如,如果我有一个 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 个最高有效位,则 returned short 将是 0b0000000000011001
。我是 C 的新手,我仍在尝试了解位管理和位移。任何有助于我更好地理解 C 的建议或反馈都非常感谢。
要获得最低有效位,您可以使用位掩码。在这种情况下,您将 按位和 应用于手头的数字,掩码为 10 个 1。需要的数可以通过bitshift 1,然后减1得到。即本例中的(1 << 10)-1
。所以任何 x 的结果都是 x & ((1 << 10)-1)
.
获取最高有效位更容易。您只需移开较低的位,例如 x >> 10
我正在尝试 return 从 16 -bit unsigned short,我一直在研究如何实现这一点。例如,如果我有一个 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 个最高有效位,则 returned short 将是 0b0000000000011001
。我是 C 的新手,我仍在尝试了解位管理和位移。任何有助于我更好地理解 C 的建议或反馈都非常感谢。
要获得最低有效位,您可以使用位掩码。在这种情况下,您将 按位和 应用于手头的数字,掩码为 10 个 1。需要的数可以通过bitshift 1,然后减1得到。即本例中的(1 << 10)-1
。所以任何 x 的结果都是 x & ((1 << 10)-1)
.
获取最高有效位更容易。您只需移开较低的位,例如 x >> 10