Java:4字节到32位整数

Java:4字节到32位整数,java,integer,byte,unsigned,signed,Java,Integer,Byte,Unsigned,Signed,我试图理解以下代码: int omgezetteTijd = ((0xFF & rekenOmNaarTijdArray[0]) << 24) | ((0xFF & rekenOmNaarTijdArray[1]) << 16) |((0xFF & rekenOmNaarTijdArray[2]) << 8) | (0xFF & rekenOmNaarTijdArray[3]); 我不明白的是,为什么你要用OxFF和它,你要用

我试图理解以下代码:

int omgezetteTijd =
((0xFF & rekenOmNaarTijdArray[0]) << 24) | ((0xFF & rekenOmNaarTijdArray[1]) << 16) |((0xFF & rekenOmNaarTijdArray[2]) << 8) | (0xFF & rekenOmNaarTijdArray[3]);
我不明白的是,为什么你要用OxFF和它,你要用8位和一个8位的值进行ANDING,比如说11111111,所以这应该给你相同的结果

但是,当我不这样做,并且它与OxFF,我得到负值?无法弄清楚为什么会发生这种情况?

当您输入一个或一个带有int的字节时,该字节将被提升为int。默认情况下,这是用int完成的。换言之:

                           //                      sign bit
                           //                         v
byte b = -1;               //                         11111111 = -1
int i = (int) b;           // 11111111111111111111111111111111 = -1
                           // \______________________/
                           //      sign extension
通过执行&0xFF可以防止这种情况。即

                           //                      sign bit
                           //                         v
byte b = -1;               //                         11111111 = -1
int i = (int) (0xFF & b);  // 00000000000000000000000011111111 = 255
                           // \______________________/
                           //     no sign extension
当您输入一个或一个带有int的字节时,该字节将被提升为int。默认情况下,这是用完成的。换言之:

                           //                      sign bit
                           //                         v
byte b = -1;               //                         11111111 = -1
int i = (int) b;           // 11111111111111111111111111111111 = -1
                           // \______________________/
                           //      sign extension
通过执行&0xFF可以防止这种情况。即

                           //                      sign bit
                           //                         v
byte b = -1;               //                         11111111 = -1
int i = (int) (0xFF & b);  // 00000000000000000000000011111111 = 255
                           // \______________________/
                           //     no sign extension

0xFF作为字节表示数字-1。当它转换为int时,它仍然是-1,但由于符号扩展,它的位表示形式为0xFFFFFF0xFF避免了这种情况,在转换为整数时将字节视为无符号。

0xFF作为字节表示数字-1。当它转换为int时,它仍然是-1,但由于符号扩展,它的位表示形式为0xFFFFFF0xFF避免了这种情况,转换为整数时将字节视为无符号。

为什么回答ByteBuffer可以为您做什么?因为我想了解不同的数据类型并知道如何使用它们:为什么回答ByteBuffer可以为您做什么?因为我想了解不同的数据类型并知道如何使用它们: