2012-04-25 7 views
2

長い配列に長い一連の番号があります。私は各ロングナンバーを取りたいと思って、その最初のビットを取得したい、最初のビットに応じて、私は他のビットを処理したい。擬似コードを以下のように、長い番号の最初のビットを削除する - ファストウェイJAVA

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

それはそれは問題に言及しています擬似コードだ@DanWこれは、Java ... –

+1

ようには見えません。 – twain249

+2

「最も価値のない」、または「最も価値のある」ビットを意味しますか? (左または右のバイナリで書かれているとき) – Hassan

答えて

4

ビットこのビットが1と0である場合、ビットが0である場合、これは1になります1と63個の場所とビット単位のAND数にわたって数をシフトする1

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

と番号をマスク。

あなたが必要のない最下位ビットがテスト部分に私を打つtwain249

int bit = temp & 1; 
+0

ありがとうございました。しかし、最下位ビット(たとえば "1110"から "111")で数字を取得したい場合は、私がしなければならないことがあります。 – Arpssss

+0

2番目の 'int bit = temp & 1;'が最低ビットを取得します。一番下のビットを削除したいのであれば、 'temp = temp >>> 1;' – twain249

3

をシフトしたいのですが、ここにあなたの質問の他の部分への答えだ場合:

long longWithoutTheFirstBit = a[i] & 0x7fffffff; 
1

長いので、あなたが行うことができます最初のビットを取得するために


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

は2の補数では、最初のビットは符号ビットであることに注意してください、8バイトの数です。

あなたはリットルを行うことができます最初のビットなしの数を取得するには - firstBitか、

長いnoFirstBit =リットル& 0x7FFFFFFFで

1

を行うことができます最初のビットを取得:number >>> 63 - 3>の兆候に気づきます - それはのためです。シフトright!

最初のビットを削除します。number & ~(1L << 63)

関連する問題