3
unsigned long long n = 0;
for (int i = 0; i <= 64; i+=2)
    n |= 1ULL << i;       //WHAT DOES THIS DO? AH! 

このコードの 3 行目が実際に何をしているのかを理解しようとしています。誰かがこれをクリアするのを手伝ってください!

4

5 に答える 5

6

その行は、nの i番目のビットを設定します。

  • 1ULLunsigned long long 型の整数 1 です。
  • <<ビットシフト演算子です。は 2 i1ULL << iに等しいか、バイナリで i 個のゼロを使用します。100...0
  • n |= x;複合代入演算子です。それは書くことに似ていn = n | x;ます。
  • 演算子|はビットごとの OR 演算子です。

ウィキペディアには、一般的なケースでビットごとの OR 演算子がどのように機能するかを示す例があります。

   0101 (decimal 5)
OR 0011 (decimal 3)
 = 0111 (decimal 7)

関連している

于 2012-06-14T17:08:31.653 に答える
1
n |= 1ULL << i;       //WHAT DOES THIS DO? AH! 

On the right hand side you have "1ULL" which is a constant 1 unsigned long long. You are left bit shifting "1ULL" i number of times. The result of the left shifting of "1ULL" will then be matched with n to perform a bitwise OR. So n will be set to (n | (1ULL << i)).

This entire line or operation is setting the ith bit of n to a 1.

于 2012-06-14T17:13:59.920 に答える
1

|= 1ULL << i単にith ビットを設定することを意味します。for は 2 ビットごとにループするため、64 ビット unsigned long long の 1 つおきのビットが 1 に設定されます。

つまり、 のようなビット パターンが得られます...0101010101

于 2012-06-14T17:09:50.440 に答える
1

1 を i 桁左にシフトし、その結果を n で OR します。実際には、ビット i を n に設定しています。

于 2012-06-14T17:09:51.363 に答える
1

これは、i の値だけシフトされた値 1 ビットで n をバイナリ OR 演算します。

n の (バイナリ) 値は次のようになると思います。

0101010101010101010101010101010101010101010101010101010101010101

テストはしていませんが、ループが完了したとき..

于 2012-06-14T17:10:11.510 に答える