长号删除第一位 - 快速方式JAVA

时间:2012-04-25 20:48:59

标签: java

我在一个长数组中有一系列长数字。我想取每个Long数,并希望得到它的第一位,根据第一位,我想处理其他位。像跟随伪代码一样,

i = 1000000 ;
long[] a = new long[i];
for j = 0  to i
 do,
  get long lo = a[i];

  // get first bit of lo

  if first bit = 0
     print long number (by removing first bit) in file a1

  else 
     print long number (by removing first bit) in file a2

任何人都可以帮助我,最快的方法是什么,“获得那个长数字的第一位”和“删除第一位并得到数字”?

4 个答案:

答案 0 :(得分:4)

用1掩盖数字。

long temp = a[i];
int bit = (temp >> 63) & 1;

这会将数字移到63位和按位,数字用1移位。如果该位为1,则为1;如果该位为0,则为0。

如果你想要最低位,你不需要移动

int bit = temp & 1;

答案 1 :(得分:3)

twain249打败了我的测试部分,但这是你问题的另一部分的答案:

long longWithoutTheFirstBit = a[i] & 0x7fffffff;

答案 2 :(得分:1)

long是一个8字节的数字,所以要获得第一位,你可以做


long l = ...
long firstBit = l & 0x80000000; // this will be 0 if the first bit is 0

请注意,在二进制补码中,第一位是符号位。

要获得没有第一位的数字,你可以做l - firstBit或者你可以做

long noFirstBit = l& 0x7FFFFFFF的

答案 3 :(得分:1)

获取第一位:number >>> 63 - 注意三>标志 - 那是无符号右移!

删除第一位:number & ~(1L << 63)