>>' Operator di Java [duplikat]'/> >>' Operator di Java [duplikat]'/> >>' Operator di Java [duplikat]'/> unsigned right Shift '>>>' Operator di Java [duplikat] | gomecomputer.com

Pertanyaan unsigned right Shift '>>>' Operator di Java [duplikat]


Kemungkinan Duplikat:
Mengapa (-1 >>> 32) = -1? 

Operator shift kanan yang tidak ditandatangani menyisipkan 0 di paling kiri. Jadi ketika saya melakukannya

System.out.println(Integer.toBinaryString(-1>>>30))

keluaran

11

Oleh karena itu, memasukkan 0 di paling kiri sedikit.

System.out.println(Integer.toBinaryString(-1>>>32))

keluaran

11111111111111111111111111111111

Bukankah seharusnya 0?


32
2018-01-24 12:19


asal


Jawaban:


Lihat http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19

Jika jenis yang dipromosikan operan kiri adalah int, hanya lima bit orde terendah dari operan kanan digunakan sebagai jarak pergeseran. Ini seolah-olah operan kanan dikenakan operator AND dan logika bitwise (§15.22.1) dengan nilai mask 0x1f (0b11111). Pergeseran jarak yang benar-benar digunakan karena itu selalu dalam kisaran 0 hingga 31, inklusif.

itu adalah -1 >>> 32  setara dengan -1 >>> 0 dan -1 >>> 33  setara dengan -1 >>> 1 dan, terutama membingungkan, -1 >>> -1  setara dengan -1 >>> 31


46
2018-01-24 12:49