我有一个C++头文件,其中包含以下定义:
#define CACHE_NUM_WAYS (1<<1)
#define CACHE_DATA_SIZE (1<<8)
Run Code Online (Sandbox Code Playgroud)
它在其余代码中用作整数.
这是什么意思?它的价值是什么?
Joh*_*0te 28
1 << 1表示:
00000000 00000001 changes to 00000000 00000010
Run Code Online (Sandbox Code Playgroud)
1 << 8表示:
00000000 00000001 changes to 00000001 00000000
Run Code Online (Sandbox Code Playgroud)
这是一个转移操作.对于右侧的每1个,您可以将自己视为左侧的值乘以2.因此,2 << 1 = 4和2 << 2 = 8.这比执行1*2更有效.
此外,您可以将4 >> 1 = 2(和5 >> 1 = 2,因为向下舍入)作为反向操作.
那些是按位移位运算符.
http://msdn.microsoft.com/en-us/library/336xbhcz(v=vs.80).aspx
<<向左移动所以它实际上乘以2表示<< 1,乘以2 ^ 8表示<< 8.
<<>>如果你有32位整数,则向左按位移位(也有向右移位)
1 = 00000000 00000000 00000000 00000001 = 1
1 << 1 = 00000000 00000000 00000000 00000010 = 2
1 << 8 = 00000000 00000000 00000001 00000000 = 256
Run Code Online (Sandbox Code Playgroud)
a<<b对于整数表示“向左移动”。的按位表示a是左移位b。这等于乘以(2的幂b)。
因此,在您的示例中,(1<<1)is 1*(2^1)是2,(1<<8)is 1*(2^8)是256。
值得指出的是,通常,与c ++中的其他运算符一样,它们<<可能会被覆盖以执行其他功能。默认情况下,输入/输出流将覆盖此运算符,以使您可以编写简洁的代码将一堆参数发送到该流。因此,您可能会看到如下代码:
cout << something << somethingelse
Run Code Online (Sandbox Code Playgroud)
并且<<也并不意味着在这种情况下左移。
| 归档时间: |
|
| 查看次数: |
50796 次 |
| 最近记录: |