APTX Blog

A Moe Blog Set By APTX

#笔记#二进制与位运算

二进制

计算机是使用二进制进行存储和计算的。二进制运算遵循的规则是“进二”。

原码,指一个二进制数左边加上符号位后所得到的码,且当二进制数大于0时,符号位为0;二进制数小于0时,符号位为1;二进制数等于0时,符号位可以为0或1。

反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码:正数的补码与原码相同,负数的补码是其对应正数二进制所有位取反后加1。

在计算机中通常使用补码进行储存。

位运算

左移右移运算:

在二进制运算中,这东西叫做“左移”“右移”运算,顾名思义,就是将一个二进制数向左或向右移动\(k\)位,就是给一个数乘 \(2^k\)或者除 \(2^k\) (末尾1不计)。

取反运算:

“~”运算又称取反运算,就是对一个二进制数按位取反。

\[~x=-x-1\]

与运算:

“&”运算又称与运算也是一种逻辑运算符,对于二进制运算来说,“&”运算的意义是对于两个二进制数的每一位,如果这一位都是\(1\),那么这一位为

\(1\)

,否则这一位为 \(0\)。

我们可以用 & 运算判断一个数是奇数还是偶数,当 \(x\) 为奇数时, \(x\)  二进制下的第 \(0\) 位一定是 \(1\) ,否则为\(0\)  。我们让\(x\& 1\),就可以知道\(x\) 的奇偶性了。

或运算:

或运算又称“|” 运算也是一种逻辑运算符,对于二进制运算来说,“|” 运算的意义是对于两个二进制数的每一位,如果这两个数此位有一个 \(1\) 那么此位就是 \(1\) ,否则为 \(0\) 。

通过对这两个运算的观察,我们可以发现一个规律:

\[\begin{array}{l}
x\& y < = x\\
x|y > = x
\end{array}\]

异或运算:

异或运算即“^”运算定义是对于两个二进制数的每一位,如果相同则为\(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

运算符的优先级

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

待会补充

转自:https://www.luogu.org/blog/chengni5673/er-jin-zhi-yu-wei-yun-suan

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注