他们为什么这么做:
Sys_SetPhysicalWorkMemory( 192 << 20, 1024 << 20 ); //Min = 201,326,592 Max = 1,073,741,824
而不是这个:
Sys_SetPhysicalWorkMemory( 201326592, 1073741824 );
他们为什么这么做:
Sys_SetPhysicalWorkMemory( 192 << 20, 1024 << 20 ); //Min = 201,326,592 Max = 1,073,741,824
而不是这个:
Sys_SetPhysicalWorkMemory( 201326592, 1073741824 );
一个简洁的属性是移动一个值<< 10
与将其乘以 1024 (1 KiB) 相同,并且<< 20
是 1024*1024 (1 MiB)。
以 10 的连续幂移位产生我们所有标准的计算机存储单位:
因此,该函数将其参数表示为 192 MB(最小)和 1024 MB(最大)。Sys_SetPhysicalWorkMemory
(int minBytes, int maxBytes)
自我评论代码:
192 << 20 表示 192 * 2^20 = 192 * 2^10 * 2^10 = 192 * 1024 * 1024 = 192 MByte
1024 << 20 表示 1024 * 2^20 = 1 GByte
对常量的计算被优化掉了,所以什么都没有丢失。
我可能错了(而且我没有研究源代码),但我想这只是出于可读性的原因。
我认为重点(尚未提及)是
除了最基本的编译器之外,所有编译器都会在编译时进行转换。每当您将运算符与常量表达式一起使用时,编译器甚至可以在生成代码之前执行此操作。请注意,在 constexpr 和 C++11 之前,这并没有扩展到函数。