考虑以下代码:
x = 1 # 0001
x << 2 # Shift left 2 bits: 0100
# Result: 4
x | 2 # Bitwise OR: 0011
# Result: 3
x & 1 # Bitwise AND: 0001
# Result: 1
Run Code Online (Sandbox Code Playgroud)
我可以理解Python(和其他语言)中的算术运算符,但我从来没有完全理解'按位'运算符.在上面的例子中(来自Python书),我理解左移但不是其他两个.
另外,实际使用的是按位运算符?我很欣赏一些例子.
我读过"什么是按位运算符?" ,所以我知道运算符是什么 ,但我还不清楚如何使用它们.任何人都可以提供任何实际的例子,说明位运算符在JavaScript中有用吗?
谢谢.
只是深入研究jQuery源代码,我发现了几个使用按位运算符的地方,例如:(只有&运算符)
// Line 2756:
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
// Line 2101
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
Run Code Online (Sandbox Code Playgroud) 'x << ~y'在JavaScript中代表什么?
我理解按位SHIFT操作执行此操作:
x << y AS x * 2y
而代字号~运算符可以:
~x AS -(x+1)
Run Code Online (Sandbox Code Playgroud)
所以,我假设如下:
5 << ~3 AS 5 * 2-4 or 5 * Math.pow(2, -4)
它应该导致0.3125.
但是,当我运行5 << ~3它时,结果1342177280.
什么是逐步解释?这种操作组合如何以及为什么会导致1342177280而不是0.3125?
(这个问题类似于Stack Overflow问题什么是按位运算符?关于按位运算SHIFT符.)
虽然我掌握了Bitwise Operators的概念,但我不能说在Web开发过程中我遇到了很多用例,我不得不求助于使用Bitwise Operators.
请记住,此问题专门用于在Web语言中使用Bitwise Operators.
我正在尝试分配:"在不使用sizeof()函数的情况下查找无符号整数数据类型中的位数."
我的设计是将整数转换为位然后计算它们.对于前:10 is 1010和5 is 101
将整数转换为位表示形式显示如下:
do
{
Vec.push_back( x & 1 )
}
while ( x >>= 1 );
Run Code Online (Sandbox Code Playgroud)
我不想只是复制粘贴的东西.当我使用F-10时,我看到(x & 1)正在做什么,但我不知道它是名字还是它如何完成它的工作(比较一些东西?).我也知道>=哪个"大于或等于"但是什么x >>= 1?
注意:标记的副本是JavaScript而不是C++
c++ bit-manipulation bit-shift bitwise-operators bitwise-and
这个最近的代码高尔夫职位询问了C中快速实现的可能性(假设n是无符号整数):
if (n==6 || n==8 || n==10 || n==12 || n==14 || n==16 || n==18 || n==20)
一种可能的简化是观察数字a[]={6,8,10,12,14,16,18,20}形成算术级数,因此改变范围然后使用一些按位技巧
if (((n - 6) & 14) + 6 == n)
正如John Bollinger 所回答的那样,实现了更短(可能确实更有效)的实现.
现在我问的是什么是类似优雅(并且希望同样有效)的实现
if (n==3 || n==5 || n==11 || n==29 || n==83 || n==245 || n==731 || n==2189)
提示:这次数字a[k]形成几何级数:a[k]=2+3^k.
我想在一般情况下,不能比排序数字更好a[k],然后进行对数搜索以测试是否n是排序数组的成员.
x <<= y (x = x << y)x >>= y (x = x >> y)x >>>= y (x = x >>> y)x &= y (x = x & y)x ^= y (x = x ^ y)x |= y (x = x | y)这些不同的运营商做了什么?
看到一段有趣的代码,在重复数字列表中找到一个孤独的数字(列表中的每个数字除了一个之外都会出现两次).
function findNonPaired(listOfNumbers) {
let nonPairedNumber = 0
listOfNumbers.forEach((n) => {
nonPairedNumber ^= n
})
return nonPairedNumber
}
const x = [1,5,4,3,9,2,3,1,4,5,9]
console.log(findNonPaired(x))Run Code Online (Sandbox Code Playgroud)
这个解决方案看起来非常优雅,但我很好奇^=操作员在这里做了什么?
javascript ×4
operators ×3
c# ×2
c++ ×2
.net ×1
binary ×1
bit-shift ×1
bitwise-and ×1
c ×1
performance ×1
python ×1
search ×1
sorting ×1