C ++:什么(a<

时间:2012-06-11 15:25:08

标签: c++ operators

我有一个C ++头文件,其中包含以下定义:

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

它在代码的其余部分用作整数。

这是什么意思?它的价值是什么?

5 个答案:

答案 0 :(得分:26)

1&lt;&lt; 1表示:

00000000 00000001 changes to 00000000 00000010

1&lt;&lt; 8表示:

00000000 00000001 changes to 00000001 00000000

这是一个转移操作。对于右侧的每1个,您可以将自己视为左侧的值乘以2.因此,2&lt;&lt; 1 = 4且2 <&lt; 1 2 = 8.这比做1 * 2效率更高。

另外,你可以做4&gt;&gt; 1 = 2(并且在向下舍入时5>&gt;> 1 = 2)作为逆操作。

答案 1 :(得分:5)

那些是按位移位运算符。

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

&LT;&LT;向左移动所以它实际上乘以2为&lt;&lt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 8。

答案 2 :(得分:5)

<<向左按位移位(还有>>按位向右移位) 如果你有32位整数

1      = 00000000 00000000 00000000 00000001 = 1
1 << 1 = 00000000 00000000 00000000 00000010 = 2
1 << 8 = 00000000 00000000 00000001 00000000 = 256

答案 3 :(得分:4)

整数的

a<<b表示“向左移”。 a的按位表示向左移位b位。这与乘以(2到b的幂)相同。

因此,在您的示例中,(1<<1) 1*(2^1)2(1<<8) 1*(2^8)256

值得指出的是,通常,与c ++中的其他运算符一样,<<可能会被覆盖以执行其他功能。默认情况下,输入/输出流会覆盖此运算符,以便您编写简洁的代码以将一堆参数发送到流。所以你可能会看到这样的代码:

cout << something << somethingelse

<< 意味着在这种情况下左移。

答案 4 :(得分: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)