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