次の定義を含む C++ ヘッダー ファイルがあります。
#define CACHE_NUM_WAYS (1<<1)
#define CACHE_DATA_SIZE (1<<8)
これは、コードの残りの部分で整数として使用されます。
どういう意味ですか?そして、その価値は何ですか?
次の定義を含む C++ ヘッダー ファイルがあります。
#define CACHE_NUM_WAYS (1<<1)
#define CACHE_DATA_SIZE (1<<8)
これは、コードの残りの部分で整数として使用されます。
どういう意味ですか?そして、その価値は何ですか?
<次の定義を含む 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()];
}
}
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)を実行できます。
<<
>>
32ビット整数の場合はビット単位で左にシフトします(ビット単位で右にシフトすることもあります)
1 = 00000000 00000000 00000000 00000001 = 1
1 << 1 = 00000000 00000000 00000000 00000010 = 2
1 << 8 = 00000000 00000000 00000001 00000000 = 256
a<<b
整数の場合は「左シフト」を意味します。のビット単位の表現は、a
左にシフトされたb
ビットです。これは、(2の累乗)を掛けるのと同じb
です。
したがって、あなたの例では、 (1<<1)
is 1*(2^1)
is 2
、(1<<8)
isis1*(2^8)
です256
。
<<
一般に、c ++の他の演算子と同様に、他の関数を実行するためにオーバーライドされる可能性があることを指摘する価値があります。デフォルトでは、入力/出力ストリームはこの演算子をオーバーライドして、一連のパラメーターをストリームに送信するための簡潔なコードを記述できるようにします。したがって、次のようなコードが表示される場合があります。
cout << something << somethingelse
この文脈での左シフトを意味するものではあり<<
ません。
これらはビット単位のシフト演算子です。
http://msdn.microsoft.com/en-us/library/336xbhcz(v=vs.80).aspx
<<は左にシフトしているため、実際には<< 1の場合は2を掛け、<<8の場合は2^8を掛けます。
演算子<<
はビット単位の左シフト演算子です。
したがって、を書く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)