如何为给定的数据类型创建掩码?

时间:2014-02-07 06:16:11

标签: c++ c

我有一个整数,其sizeof将在运行时确定。现在,我想根据它的大小使用它进行屏蔽。

例如,如果int的大小为2个字节,则掩码值为0xFF。如果整数的大小是4字节,那么掩码值是0xFFFF。我该怎么办?另外,最后我想从一个数字中提取最重要的半字节。我怎么能以聪明的方式这样做?

2 个答案:

答案 0 :(得分:0)

//假设您选择signed int

0XFFFFFFFF == -1(在4byte int machine中)

0XFFFF == -1(在2byte int machine中)

0XFF == -1(在机器中的1byte不再存在)

所以在运行时即使大小增加,你的变量也会分配给-1。

将MSB x计算为您的号码

if( ( (0 | 1) << sizeof(int) & x) > 0)
    //MSB is 1
else 
    // MSB is 0 

答案 1 :(得分:0)

#include <stdio.h>
#include <limits.h>

unsigned Most_Significant_nibble(int number){
    int numOfHalfBit = sizeof(number) * CHAR_BIT / 2;
    unsigned num = number, mask = (1u << numOfHalfBit)-1;
    return (num >> numOfHalfBit) & mask;
}

int main(void){
    int n = 0x87654321;//size of int is 4
    unsigned msn = Most_Significant_nibble(n);
    printf("%#x\n", msn);//0x8765
    return 0;
}