Java - Tidak dapat mengedit konten array byte? [duplikat]

    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;

Ketika saya menjalankan ini, output saya adalah:

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

Apa yang terjadi?


person Foo Bar    schedule 29.09.2015    source sumber
comment
Menurut Anda berapa kisaran nilai yang dapat Anda simpan dalam satu byte?   -  person Andy Turner    schedule 29.09.2015


Jawaban (6)



Satu byte memiliki rentang antara -128 dan 127 (-2^7 hingga 2^7-1) Menambahkan 256 seperti melakukan putaran 360 derajat. Ubah 256 menjadi 128 pada kode Anda dan in akan menampilkan hasil yang berbeda

person Armando SM    schedule 29.09.2015

byte hanya 8 bit, jadi hanya dapat menampung 2^8 = 256 nilai. Itu ditandatangani di java sehingga nilainya berada dalam kisaran [-128,127] inklusif.

person James Wierzba    schedule 29.09.2015

A byte dapat menampung 256 nilai berbeda. Jika Anda menambahkan 256 byte akan meluap, dan hasilnya tetap sama. Di java kisarannya adalah [-128, 127].

person AlexWien    schedule 29.09.2015

byte adalah 8 bit dan bilangan bulat adalah 32 bit

pada dasarnya melihat bit:

byte b = -37 setara dengan 219(int) yang binernya adalah:

0000 0000 0000 1101 1011

ke dalam 256:

0000 0000 0001 0000 0000

menambahkan keduanya akan memberikan nilai int 475:

0000 0000 0001 1101 1011

sekarang ubah menjadi byte yaitu ambil LSB 8 bit akan menjadi:

1101 1011

yaitu -37

Semoga ini menjelaskan

person abhish_gl    schedule 29.09.2015

Sebuah byte dapat menampung 256 nilai yang berbeda, jadi ketika Anda menambahkan 256 Anda membuat Rol (Rotate left) 8 times, yang mengembalikan nilai yang sama seperti sebelumnya.

Jika keinginan Anda adalah mengubah -69 menjadi 69, mengapa Anda tidak membuat stuffA[x] *=-1?

Jika Anda benar-benar ingin membalikkan bit, Anda dapat menggunakan complement operator (~), stuffA[x] = (byte) ~stuffA[x];, tetapi karena two's complement form, untuk mendapatkan nomor yang sama seperti sebelumnya Anda perlu add 1,

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

person Johnny Willer    schedule 29.09.2015