如何设置整数的MSB 4位而不考虑字节顺序?

时间:2015-02-26 11:10:36

标签: c bitwise-operators

修订问题 -

如何计算掩码位而不管整数类型的大小? 我想计算前4位的掩码,当我不是整数的大小时。

我有两个选项可以在代码中设置MSB 4位 -

如果little_Endian -

然后 -

  int t  = 54342;

    int k = t<<4;
    int t = (k>>4)|0XF000

其他大Endian - 然后 -

 int t  = 54342;
    int k = t>>4;
    int t = (k<<4)|0X000F

我的问题是有没有更好的方法。如何使代码独立于字节顺序?我可以使用union来确定字节序。但是,我希望我的代码很简单。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

Endianess用于解释字节存储在内存中的方式。如果你在没有任何指针操作的情况下直接引用变量,它就没有规定如何访问字节。

这意味着,无论平台的endianess如何,以下程序都会产生相同的结果。

int main(void)
{
    int num = 0xDEADBEEF;
    int mask = 0xF0000000;

    printf("SET = %X\n", (unsigned int) (num | mask));
    return 0;
}