Java Bitwise AND运算符

时间:2012-09-13 18:17:07

标签: java bit-manipulation mask

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

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

b,c和d在这种情况下给出正确的答案,255,然而,无论我改变什么,继续给我-1和其他负数,我甚至尝试过:

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

它给了我-17。

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

3 个答案:

答案 0 :(得分:9)

这是因为符号扩展。如果最顶部的位为1,则>>在1s内移位。这是为了保留论证的符号。你想使用>>>,它总是在0中移位。或者,在班次后掩盖:

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

答案 1 :(得分: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;

答案 2 :(得分:0)

我认为你需要unsigned shifting

以这种方式试试......

(0xffffffff & 0xff000000) >>> 24