java - Bitwise AND operation with a signed byte -


here code:

int = 200; byte b = (byte) 200; system.out.println(b); system.out.println((short) (b)); system.out.println((b & 0xff)); system.out.println((short) (b & 0xff)); 

here output:

-56 -56 200 200 

bitwise , 0xff shouldn't have changed in b, apparently have effect, why?

it has effect because 200 beyond maximum possible (signed) byte, 127. value assigned -56 because of overflow. significant byte, worth -128, set.

11001000 

the first 2 output statements show -56 because of this, , fact casting short perform sign extension preserve negative values.

when perform & 0xff, 2 things happen. first, value promoted int, sign extension.

11111111 11111111 11111111 11001000 

then, bit-and performed, keeping last 8 bits. here, 8th bit no longer -128, 128, 200 restored.

00000000 00000000 00000000 11001000 

this occurs whether value casted short or not; short has 16 bits , can represent 200.

00000000 11001000 

Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -