【问题标题】:Java Bitwise AND operatorJava 按位与运算符
【发布时间】:2012-09-06 21:37:44
【问题描述】:

我试图屏蔽一个整数,以便像这样单独分隔每个字节:

     int a = (0xffffffff & 0xff000000) >> 24;
     int b = (0xffffffff & 0x00ff0000) >> 16;
     int c = (0xffffffff & 0x0000ff00) >> 8;
     int d = 0xffffffff & 0x000000ff;

在这种情况下,b、c 和 d 给出了正确答案,255,但是,无论我将其更改为什么,a 都会继续给我 -1 和其他负数,我什至尝试过:

             int a = (0xefffffff & 0xff000000) >> 24;

它给了我-17。

有人知道我该如何解决这个问题,以便在这种边界情况下 a 给我 255 和其他正数吗?

【问题讨论】:

标签: java bit-manipulation mask


【解决方案1】:

这是因为符号扩展。如果最高位为 1,则>> 移入 1。这是为了保留论证的符号。您想使用>>>,它总是在 0 中移动。或者,在移动之后进行掩码:

int a = (0xffffffff >> 24) & 0x000000ff;

【讨论】:

    【解决方案2】:

    你正在做一个有符号的移位,所以这个符号被保留了。

    int a = (0xffffffff & 0xff000000) >>> 24; // unsigned shift.
    

    int a = 0xffffffff >>> 24; // unsigned shift and all the bottom bits are lost anyway
    int b = (0xffffffff >>> 16) & 0xFF;
    int c = (0xffffffff >>> 8) & 0xFF;
    int d = 0xffffffff & 0xFF;
    

    【讨论】:

      【解决方案3】:

      我认为你需要一个unsigned shifting

      试试这个方法...

      (0xffffffff & 0xff000000) >>> 24

      【讨论】:

        猜你喜欢
        • 2016-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 2013-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多