声明是什么"(311& 255)"在C ++中意味着当第二个数字是2的幂而不是任何数字时它与加速内存访问有什么关系?
答案 0 :(得分:2)
'&' operator是二进制的按位运算符,可用于在(311 & 255)
这样的表达式中使用“位掩码”。
311中的二进制为100110111.当您使用255(二进制为11111111)执行AND运算时,结果是将第7位左侧的任何位设置为零。在这种情况下,结果是00110111 - 最高有效位设置为0.这是当一组位用于“屏蔽”另一组时所指的。
100110111
& 011111111
-----------
000110111
这种操作通常在计算内存地址时使用,因为缓存和内存总线通常与两个幂的大小对齐,这意味着当您访问一个2的幂的地址时,您将更多地适合该块内存进入缓存并需要更少的内存总线访问来获取它。为了真正成为一个优势,软件设计师(即您)必须在意识到这一事实的情况下规划内存分配。
如果你想在这个级别负责内存,那么确切地知道你的硬件会做什么是个好主意。