【发布时间】:2014-02-07 06:16:10
【问题描述】:
我有一个整数,它的 sizeof 将在运行时确定。现在,我想根据它的大小使用它进行遮罩。
例如,如果 int 的大小为 2 个字节,则掩码值为 0xFF。如果整数的大小是 4 字节,那么掩码值为 0xFFFF。我该怎么做?另外,最后我想从一个数字中提取最重要的半字节。我怎样才能聪明地做到这一点?
【问题讨论】:
-
0xff占用一个字节,而不是两个字节。 -
对于掩码值,只需使用
UINT_MAX(假设它实际上是2字节的0xFFFF和4字节的0xFFFFFFFF)。 -
您可以使用
(1ul << (sizeof(int) * CHAR_BIT)) - 1来屏蔽int(但您为什么要这样做?)——至于MSN,它是number >> (sizeof(number) * CHAR_BIT - 4)。 -
@Yuushi 而不是
UINT_MAX,不是吗? 16 位INT_MAX将是 0x7FFF。 -
整数的大小不是在运行时确定的。在编译时就已经知道了。