繁体   English   中英

Java Bitwise AND运算符

[英]Java Bitwise AND operator

我试图掩盖一个整数,以便单独分隔每个字节,如下所示:

     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和其他正数?

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

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

您正在进行签名班次,因此保留了该符号。

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;

我认为你需要一个unsigned shifting

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

(0xffffffff & 0xff000000) >>> 24

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM