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

C++ 如何为给定的数据类型创建掩码?,c++,c,C++,C,我有一个整数,其大小将在运行时确定。现在,我想根据它的大小用它来遮罩 例如,如果int的大小为2字节,则掩码值为0xFF。如果整数的大小是4字节,那么掩码值是0xFFFF。我怎么做?另外,最后我想从一个数字中提取最重要的半字节。如何以智能方式执行此操作?//假设您使用带符号int 0xFFFFFF==-1(在4字节整数机器中) 0XFFFF==-1(在2byte int机器中) 0XFF==-1(在不再存在的机器中以1字节为单位) 所以在运行时,即使大小增加,分配给-1的变量也会增加 计算MSB

我有一个整数,其大小将在运行时确定。现在,我想根据它的大小用它来遮罩


例如,如果int的大小为2字节,则掩码值为0xFF。如果整数的大小是4字节,那么掩码值是0xFFFF。我怎么做?另外,最后我想从一个数字中提取最重要的半字节。如何以智能方式执行此操作?

//假设您使用
带符号int

0xFFFFFF==-1
(在4字节整数机器中)

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

0XFF==-1
(在不再存在的机器中以1字节为单位)

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

计算MSB
x
为您的号码

if( ( (0 | 1) << sizeof(int) & x) > 0)
    //MSB is 1
else 
    // MSB is 0 
if((0 | 1)0)
//MSB为1
其他的
//MSB为0
#包括
#包括
无符号最高有效位(整数){
int numoffhalbit=sizeof(number)*字符位/2;
无符号num=数字,掩码=(1u>numf半位)&掩码;
}
内部主(空){
int n=0x87654321;//int的大小为4
无符号msn=最大有效半字节(n);
printf(“%#x\n”,msn);//0x8765
返回0;
}

0xff
需要一个字节,而不是两个字节。对于掩码值,只需使用
UINT_MAX
(假设它实际上是0xFFFF,用于2个字节,0xFFFFFF用于4个字节)。您可以执行
(1ul@Yuushi而不是
UINT_MAX
,否?16位
INT_MAX
将是0x7FFF。整数的大小在运行时不确定。编译时已经知道了。
#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;
}