On Feb 18, 12:54 am, Rizvan S <porting.begin...@gmail.com> wrote: > On Wed, Feb 18, 2009 at 12:41 AM, Jiang <webs...@yahoo.cn> wrote: > > long a = 0x1234567890abL; > > long b = (a & 0xFFFFFFFF); > > I expect the value of b is 0x567890abL, but in practice, it is still > > 0x1234567890abL. > > Output : > > ubuntu:~$ ./t32bit > b =567890ab > > I am getting correct output.
The correct output for the original implementation (here in compilable form): public class Foo { public static void main(String[] args) { long a = 0x1234567890abL; long b = (a & 0xFFFFFFFF); System.out.println("b is " + Long.toHexString(b)); } } is: b is 1234567890ab As the original poster noted in his update, a missing 'L' on the constant is the source of the trouble. Because all primitive types except "char" are signed, 0xffffffff is sign-extended to 0xffffffffffffffffL, and 'b' remains unchanged. Appending 'L' to the constant yields the desired behavior. This happens a lot in Java, usually when you're pulling binary data out of a file. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---