在Doom3的源代码中,为什么他们使用bitshift来生成数字而不是硬编码呢?

wyr*_*red 10 c++

他们为什么这么做:

Sys_SetPhysicalWorkMemory( 192 << 20, 1024 << 20 );   //Min = 201,326,592  Max = 1,073,741,824
Run Code Online (Sandbox Code Playgroud)

而不是这个:

Sys_SetPhysicalWorkMemory( 201326592, 1073741824 );
Run Code Online (Sandbox Code Playgroud)

这篇文章我从中得到了代码

Jon*_*art 25

一个简洁的属性是移位一个值<< 10与乘以1024(1 KiB)相同,并且<< 20是1024*1024,(1 MiB).

连续10次移位产生我们所有的标准计算机存储单元:

因此该函数将其参数表示为192 MB(最小)和1024 MB(最大).Sys_SetPhysicalWorkMemory(int minBytes, int maxBytes)

  • 那些是kibi和mebibytes,而不是kilo/mega. (3认同)

Eli*_*nti 12

自我评论代码:

192 << 20表示192*2 ^ 20 = 192*2 ^ 10*2 ^ 10 = 192*1024*1024 = 192 MByte

1024 << 20表示1024*2 ^ 20 = 1 GByte

对常数的计算进行了优化,因此不会丢失任何东西.