21

次の定義を含む C++ ヘッダー ファイルがあります。

#define CACHE_NUM_WAYS    (1<<1)
#define CACHE_DATA_SIZE   (1<<8)

これは、コードの残りの部分で整数として使用されます。

どういう意味ですか?そして、その価値は何ですか?


辞書を使用すると、次のようなことができます...

class Program
{
    static void Main(string[] args)
    {
        ScoreTextTranslator dec = new ScoreTextTranslator();
        dec.IfAtLeast(0, "stupid");
        dec.IfAtLeast(5, "average intelligence");
        dec.IfAtLeast(6, "smart");
        Console.WriteLine(dec.GetTextForScore(5.7f));
    }
}

class ScoreTextTranslator
{
    Dictionary<float, string> backing = new Dictionary<float, string>();
    public void IfAtLeast(float value, string text)
    {
        backing.Add(value, text);
    }
    public string GetTextForScore(float ActualScore)
    {
        var scoreRange = backing.Keys.Where(a => a <= ActualScore);
        if (scoreRange.Count() == 0)
            throw new Exception("No valid score text exists");
        else
            return backing[scoreRange.Max()];
    }
}
4

7 に答える 7

39

1 << 1は、次のことを意味します。

00000000 00000001 changes to 00000000 00000010

1 << 8は、次のことを意味します。

00000000 00000001 changes to 00000001 00000000

これはビットシフト操作です。右側の1ごとに、左側の値に2を掛けたものと考えることができます。つまり、2 << 1=4および2<<2=8です。これは1*2を実行するよりもはるかに効率的です。

また、逆演算として4 >> 1 = 2(および切り捨てたため5 >> 1 = 2)を実行できます。

于 2012-06-11T15:29:46.050 に答える
6

<<>>32ビット整数の場合はビット単位で左にシフトします(ビット単位で右にシフトすることもあります)

1      = 00000000 00000000 00000000 00000001 = 1
1 << 1 = 00000000 00000000 00000000 00000010 = 2
1 << 8 = 00000000 00000000 00000001 00000000 = 256
于 2012-06-11T15:29:08.540 に答える
6

a<<b整数の場合は「左シフト」を意味します。のビット単位の表現は、a左にシフトされたbビットです。これは、(2の累乗)を掛けるのと同じbです。

したがって、あなたの例では、 (1<<1)is 1*(2^1)is 2(1<<8)isis1*(2^8)です256

<<一般に、c ++の他の演算子と同様に、他の関数を実行するためにオーバーライドされる可能性があることを指摘する価値があります。デフォルトでは、入力/出力ストリームはこの演算子をオーバーライドして、一連のパラメーターをストリームに送信するための簡潔なコードを記述できるようにします。したがって、次のようなコードが表示される場合があります。

cout << something << somethingelse

この文脈での左シフトを意味するものではあり<<ません。

于 2012-06-11T15:32:42.133 に答える
5

これらはビット単位のシフト演算子です。

http://msdn.microsoft.com/en-us/library/336xbhcz(v=vs.80).aspx

<<は左にシフトしているため、実際には<< 1の場合は2を掛け、<<8の場合は2^8を掛けます。

于 2012-06-11T15:27:22.597 に答える
3

演算子<<はビット単位の左シフト演算子です。

したがって、を書く1<<17と、のバイナリ表現は次のようにビット単位で1左にシフトされます。17

//before (assume 1 is represented by 32-bit)
1 << 17  
0000 0000 0000 0000 0000 0000 0000 0001 << 17 (before - binary representation)

//after
0000 0000 0000 0010 0000 0000 0000 0000       (after - binary representation)
于 2012-06-11T15:28:49.363 に答える