Java 爪哇语;int i=字节1“0x0200”;vs";int i=字节1;?

Java 爪哇语;int i=字节1“0x0200”;vs";int i=字节1;?,java,bit-manipulation,bitwise-operators,Java,Bit Manipulation,Bitwise Operators,在页面中: 在位和移位操作中,类型byte隐式转换为 int如果字节值为负,则最高位为1,然后为1 用于填充int中的额外字节。因此 byte b1=-5; int i = b1 | 0x0200; 结果将给出i==-5 我理解0x0200等于0b0000 0010 0000。但是在上面显示的文章中,0x0200的意义是什么 我的意思是-b1 | 0x0200将始终等于I(请参见下面的“My Test”),那么在上面的文章中,为什么不简单地写字节b1=-5;int i=b1 我的测试: pub

在页面中:

在位和移位操作中,类型
byte
隐式转换为
int
如果字节值为负,则最高位为1,然后为1 用于填充int中的额外字节。因此

byte b1=-5; int i = b1 | 0x0200;
结果将给出i==-5

我理解
0x0200
等于
0b0000 0010 0000
。但是在上面显示的文章中,
0x0200
的意义是什么

我的意思是-
b1 | 0x0200
将始终等于
I
(请参见下面的“My Test”),那么在上面的文章中,为什么不简单地写
字节b1=-5;int i=b1

我的测试

public static void main(final String args[]) {
    final byte min_byte = Byte.MIN_VALUE; // -128
    final byte limit = 0; // according to the bolded words in the passage
    for (byte b = min_byte; b < limit; ++b) {
        final int i1 = b;
        final int i2 = b | 0x0200;
        if (i1 != i2) { // this never happens!
            System.out.println(b);
        }
    }
}
publicstaticvoidmain(最终字符串参数[]){
最终字节最小值=字节最小值;//-128
最终字节限制=0;//根据文章中的粗体字
用于(字节b=min_字节;b
但是上面所示的文章中0x0200的意义是什么

此操作仅用于说明目的:值
0x200
OR位于一个等于
1
的位置。这样做的目的是显示结果不是
0x000002FB
,而是实际的
-5
,即
0xfffffb

我理解0x0200等于0b1111 1110 0000 0000

不,不是。正确的值由下式给出:

int i = 0x0200; // <-- decimal 512
System.out.println(Integer.toBinaryString(i));
如果我们检查你的第二个值

byte b1 = -5;
System.out.println(Integer.toBinaryString(b1));
我们得到

11111111111111111111111111111011
把两个号码排成一行

11111111111111111111111111111011
00000000000000000000001000000000
显然,结果将是
-5
的位值(因为
-5
中唯一的
0
也是
0x0200
中的
0
)。为了确定我们可以检查的重要性

int i = 0x0200; // <-- Decimal 512
System.out.println("Dec: " + Integer.toBinaryString(i).length());
因此,给定的按位OR将强制第十位为真。在输入字节中是正确的,但如果使用-Decimal 1535(
0b 101 1111 1111
),则会得到

System.out.println(1535 | 0x0200);
输出为

2047
因为如果对两个数字执行按位或运算

01000000000
10111111111
你得到

11111111111

@SotiriosDelimanolis——我认为你在没有正确直觉的情况下与他人的答案混为一谈是令人恼火的!我想OP已经得到了他想要的!如果你感到不安,你最好写一个答案!如果你对其他答案非常不满意,我郑重建议你为此写一个答案@埃利奥特弗里希:是的,那好多了。@shekharsuman我欣赏建设性的批评。如果我的答案不清楚,我宁愿改进它。@ElliottFrisch不,先生,你的答案是我们所有人中最好的。但是,我只是对索蒂里奥斯·德里马诺利斯先生在没有经过适当思考的情况下批评他人答案的做法感到不满意!我再次感谢你的回答@ElliottFrisch,非常感谢你的回答!我真的很抱歉我的
1111…
问题中的拼写错误,我已经编辑了它。换句话说,你是说0x0100、0x0300和0x0400(以及任何形式为0xAB00)到0xFF00的内容都适合这篇文章?@OliCharlesworth,对不起,这是一个拼写错误,已编辑。
01000000000
10111111111
11111111111