我在一个长数组中有一系列长数字。我想取每个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
任何人都可以帮助我,最快的方法是什么,“获得那个长数字的第一位”和“删除第一位并得到数字”?
答案 0 :(得分:4)
用1掩盖数字。
long temp = a[i];
int bit = (temp >> 63) & 1;
这会将数字移到63位和按位,数字用1移位。如果该位为1,则为1;如果该位为0,则为0。
如果你想要最低位,你不需要移动
int bit = temp & 1;
答案 1 :(得分:3)
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)