C ++中的“&”和“>>”数字运算符?
Posted
技术标签:
【中文标题】C ++中的“&”和“>>”数字运算符?【英文标题】:"&" and ">>" number operator in C++? 【发布时间】:2022-01-11 06:58:02 【问题描述】:我正在尝试用 javascript 制作一个 raycaster 游戏,为此,我关注this tutorial,它是用 C++ 编写的。
我的问题源于试图将以下两行转换为 javascript:
int tx = (int)(texWidth * (floorX - cellX)) & (texWidth - 1);
color = (color >> 1) & 8355711; // make a bit darker
我不知道这两行中的“&”和“>>”是什么意思。 Javascript中是否有等价物?
【问题讨论】:
等价物是&
和>>
。这些可以在任何 JS 运算符列表中找到。
这些是bitwise operators,在大多数现代语言中都是一样的。
如果对运算符有疑问,请搜索“[language here] operators”..
切向相关:位掩码通常表示为十六进制,因此它们更有意义:0x7F7F7F
。此位掩码具有丢弃 RGB 三元组的高位的效果。
那个代码太恶心了。硬编码值 8355711 用十六进制表示要好得多:0x7f7f7f 您实际上可以看到它的作用。它正在丢弃每个颜色通道的最高有效位。因此,如果您这样看,您可以看到您已将所有位向右移动了一个位置,因此位掩码将从相邻颜色通道中删除溢出位。实际上,此操作将每个颜色通道除以 2。因此“稍微”更暗意味着“相当”更暗(取决于您的色彩空间)。应该有一个代码注释来解释这一点。
【参考方案1】:
代码直接翻译成JS,去掉了(int)类型转换,用let/var/const替换了int。
let tx = (texWidth * (floorX - cellX)) & (texWidth - 1);
color = (color >> 1) & 8355711; // make a bit darker
&
是按位,>>
是右移,解释得很好here。
【讨论】:
【参考方案2】:>>
是正确的移位运算符,&
是按位与运算符,它们都在 JavaScript 中可用
【讨论】:
以上是关于C ++中的“&”和“>>”数字运算符?的主要内容,如果未能解决你的问题,请参考以下文章