我有一个整数,其sizeof将在运行时确定。现在,我想根据它的大小使用它进行屏蔽。
例如,如果int的大小为2个字节,则掩码值为0xFF。如果整数的大小是4字节,那么掩码值是0xFFFF。我该怎么办?另外,最后我想从一个数字中提取最重要的半字节。我怎么能以聪明的方式这样做?
答案 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;
}