關於位運算

Posted azureholmes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了關於位運算相关的知识,希望对你有一定的参考价值。

來自https://www.luogu.org/blog/chengni5673/er-jin-zhi-yu-wei-yun-suan    轉侵刪

一··左移<<  右移>>

“将一个二进制数向左或向右移动 k 位,就是给一个数乘 2^k 或者除 2^k(末尾1不计)。

二·取反~

“对于 int 来说, ~ x=-x-1

三·與and &

“对于两个二进制数的每一位,如果这一位都是 1 ,那么这一位为 1 ,否则这一位为 0

if(x&1) 那麼x是奇數

四·或or |

“如果这两个数此位有一个 1 那么此位就是 1,否则为0

  • x & y<=x
  • x | y>=x

 

五·異或xor  ^

“对于两个二进制数的每一位,如果相同则为 0 ,否则为 1

显而易见的是一个数异或他自己肯定是得 0 的

对于一个形如 2*n 的数 x, x ^ 1 =x+1,而对于一个形如 2*n+1 的数 x, x ^ 1 =x-1

如果 x ^ y=z 那么 y ^ z=x, x ^ z=y

"关于位运算的优先级,大致按下面排序

加减运算 >> 移位运算 >> 比较大小运算 >> 与运算 >> 异或运算 >> 或运算"

優化

交換兩個整數: x=x^y, y=y^x, x=x^y

技术分享图片

 


以上是关于關於位運算的主要内容,如果未能解决你的问题,请参考以下文章

小數點的運算[討論區- PHP新手區] : 台灣PHP聯盟

SSL/TLS

Python 函數與常用模組 - 生成器並行運算

王堅:「資料」改變了商業模式,運算能力決定企業的競爭力

關於JS的引入,變量,以及運算符的使用

[Node.js] 關於 console.log 的格式化輸出