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的变量也会增加
计算MSBx
为您的号码
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;
}