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 ++中的“&”和“>>”数字运算符?的主要内容,如果未能解决你的问题,请参考以下文章

>>8) & 0xFF中的 >> 和 &0xFF 的作用

C ++中的字符串流以解析单词和数字的字符串

系统基本符号和正则符号介绍

用C++实现从键盘输入两个数a和b,求两数中的最大值

有人知道C语言中&和^的使用方法吗?

linux中的管道和重定向