Java - 无法编辑字节数组内容?

时间:2015-09-29 20:16:40

标签: java arrays casting byte

    byte[] stuffA = {69,96,13,37,-69,-96,-13,-37};
    for(int x = 0; x < stuffA.length; x++){
        if(stuffA[x] < 0){
            System.out.println("Somethin be up yo! ");
            System.out.println("This number be negative! " + (int)stuffA[x]);
            stuffA[x] = (byte)((int)stuffA[x] + 256);
            System.out.println("I added 256 and now stuff is positive yo! " + stuffA[x]);
        }
    }
    return;

当我运行它时,我的输出是:

Somethin be up yo! 
This number be negative! -69
I added 256 and now stuff is positive yo! -69
Somethin be up yo! 
This number be negative! -96
I added 256 and now stuff is positive yo! -96
Somethin be up yo! 
This number be negative! -13
I added 256 and now stuff is positive yo! -13
Somethin be up yo! 
This number be negative! -37
I added 256 and now stuff is positive yo! -37

发生了什么事?

6 个答案:

答案 0 :(得分:1)

引用Java语言规范,第4.2.1部分:

  

整数类型的值是以下范围内的整数:对于byte,从-128到127(含)。

因此,-69 + 256 = 187 = 0x000000BB施放到字节为0xBB = -69

答案 1 :(得分:1)

一个字节的范围在-128到127之间(-2 ^ 7到2 ^ 7-1)。添加256就像做360度转弯一样。在您的代码中更改256到128,将显示不同的结果

答案 2 :(得分:0)

byte只有8位,所以只能容纳2 ^ 8 = 256个值。它在java中签名,因此值在[-128,127]范围内。

答案 3 :(得分:0)

byte可以容纳256个不同的值。如果添加256字节溢出,结果保持不变。 在java中,范围是[-128,127]。

答案 4 :(得分:0)

一个字节可以保存256个不同的值,因此当您添加256时,您将生成一个Rol (Rotate left) 8 times,它返回与之前相同的值。

如果您希望改变-69中的69,那么为什么您只是不做stuffA[x] *=-1

如果您确实要反转这些位,可以使用complement operator~),stuffA[x] = (byte) ~stuffA[x];,但由于two's complement form,要获得相同的数字您需要add 1

喜欢stuffA[x] = (byte) ((~stuffA[x]) + 1);

答案 5 :(得分:0)

字节为8位,整数为32位

基本上看位:

byte b = -37相当于219(int),其二进制为:

0000 0000 0000 1101 1011

int 256:

0000 0000 0001 0000 0000

添加两者将得到int值为475:

0000 0000 0001 1101 1011

现在将其转换为字节,即LSB 8位将为:

1101 1011

是-37

希望这能解释