我是一个仅出于乐趣而编写代码的人,并且在学术或专业环境中都没有真正地去研究它,所以像这些按位运算符之类的东西真的让我感到困惑。
我正在阅读一篇有关JavaScript的文章,该文章显然支持按位操作。我一直看到该操作在某些地方提到过,并且我尝试阅读以弄清楚它到底是什么,但是我似乎一点也不了解。那是什么
清楚的例子会很棒!:D
再问几个问题-按位运算的一些实际应用是什么?您什么时候可以使用它们?
由于没有人提出这些有用的主题:
在处理标志时,我经常使用按位运算。例如,如果您要将一系列标志传递给某个操作(例如,File.Open()
同时启用了读取模式和写入模式的),则可以将它们作为单个值传递。这是通过在位集中为每个可能的标志分配自己的位来实现的(字节,short,int或long)。例如:
Read: 00000001
Write: 00000010
因此,如果您要通过读写,则可以通过(READ | WRITE),然后将两者合并为
00000011
然后可以在另一端将其解密,例如:
if ((flag & Read) != 0) { //...
哪个检查
00000011 &
00000001
哪个返回
00000001
它不是0,因此该标志确实指定了READ。
您可以使用XOR来切换各个位。我在使用标志指定方向输入(上,下,左,右)时使用了此方法。例如,如果一个精灵正在水平移动,而我希望它转过身:
Up: 00000001
Down: 00000010
Left: 00000100
Right: 00001000
Current: 00000100
我只是简单地将当前值与(LEFT | RIGHT)进行异或,在这种情况下,它将关闭LEFT并打开RIGHT。
移位在某些情况下很有用。
x << y
是相同的
x * 2 y
如果您需要快速乘以2的幂,但是要注意将1位移位到最高位-否则该数将为负,除非它是无符号的。在处理不同大小的数据时,它也很有用。例如,从四个字节读取一个整数:
int val = (A << 24) | (B << 16) | (C << 8) | D;
假设A是最高有效字节,D是最低字节。最终结果为:
A = 01000000
B = 00000101
C = 00101011
D = 11100011
val = 01000000 00000101 00101011 11100011
颜色通常以这种方式存储(最高有效字节被忽略或用作Alpha):
A = 255 = 11111111
R = 21 = 00010101
G = 255 = 11111111
B = 0 = 00000000
Color = 11111111 00010101 11111111 00000000
要再次查找这些值,只需将这些位向右移动,直到其位于底部,然后屏蔽掉其余的高阶位:
Int Alpha = Color >> 24
Int Red = Color >> 16 & 0xFF
Int Green = Color >> 8 & 0xFF
Int Blue = Color & 0xFF
0xFF
与相同11111111
。因此,从本质上讲,对于Red,您将这样做:
Color >> 16 = (filled in 00000000 00000000)11111111 00010101 (removed 11111111 00000000)
00000000 00000000 11111111 00010101 &
00000000 00000000 00000000 11111111 =
00000000 00000000 00000000 00010101 (The original value)
问题内容: 我正在研究《 Beginning Android Games》 这本书。我注意到的一件事是: 这是我第一次看到这样的变量,所以我不知道它的作用。我在Java中运行代码并创建了一些示例。 如果我运行此代码: 答案将是0?这是为什么? 如果我运行此代码: 起初,我认为这是价值的串联,因此我假设i = 10500,但事实并非如此。答案是一样的。还是0?有人知道这里发生了什么吗? 问题答案:
问题内容: 这些不同的运算符做什么? 问题答案: <<, >> 分别向左和向右移位]。如果想象左操作数作为位的二进制序列,你正在移那些向左或向右的比特数指示由右操作数。 它们分别是按位 和 , xor和或。你能想到的,并为同行和,但他们会将自己的操作数为位向量,并在每个位执行逻辑运算。没有运算符,但是此运算是“xor”或“exclusiveor”。您可以将“ a xorb”视为“ a或b,但不能同
本文向大家介绍JavaScript 按位NOT运算符(〜),包括了JavaScript 按位NOT运算符(〜)的使用技巧和注意事项,需要的朋友参考一下 示例 按位NOT(~)对值中的每个位执行NOT操作。 语法: 返回值: 一个Number。 描述 NOT操作的真值表为: 一种 不是 0 1 1 0 按位不加数字会导致:-(x + 1)。 例子: 值(以10为底) 值(以2为底) 返回(以2为底)
本文向大家介绍JavaScript中的运算符是什么?,包括了JavaScript中的运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 让我们采用一个简单的表达式“ 4 + 5等于9”。这里4和5称为操作数,“ +”称为运算符。 JavaScript支持以下类型的运算符。 算术运算符 比较运算符 逻辑(或关系)运算符 赋值运算符 条件(或三元)运算符 例 这是一个说明运算符示例的示例-
本文向大家介绍什么是JavaScript中的增量(++)运算符?,包括了什么是JavaScript中的增量(++)运算符?的使用技巧和注意事项,需要的朋友参考一下 增量运算符将整数值加1。这是一个示例,其中使用递增运算符两次将a的值递增两次 示例
本文向大家介绍JavaScript中的条件运算符是什么?,包括了JavaScript中的条件运算符是什么?的使用技巧和注意事项,需要的朋友参考一下 条件运算符首先对表达式的真值或假值求值,然后根据求值结果执行两个给定语句之一。 序号 运算符和说明 1 ?:(视情况而定) 如果条件为真?然后取值X:否则取值Y 示例 尝试以下代码以了解条件运算符在JavaScript中的工作方式: