计算机基础 - 位运算

与运算

&, 与, 两位都为1, 结果才为1, (都真才真)

与的用途

清零
如果想将一个单元清零, 只要与一个各位都为零的数相与, 结果就为零
取一个数的指定位
比如取x的低四位, 只需要找另一个数y, 令y的低4位为1, 其余位为0, 然后x和y按位与运算, 即可得到x的指定位
判断奇偶
二进制末位是0就是偶数, 1就是奇数, 可以用a&1==0判断a是不是偶数

或运算

|, 或, 两位都为0, 结果才为0, (都假才假)

或的用途

对一个数据的某些位设置为1
比如将x的低四位设置为1, 只需要找另一个数y, 令y的低4位为1, 其余位为0, 然后x和y按位与运算, 即可得到

异或运算

^, 异或, 两位相同为0, 两位不同为1, (不同才真)

异或特性

  • 交换律
  • 结合律
  • 对任何数x, 异或自身等于0, 异或0等于自身
  • 自反性, a^b^b=a^0=a, 即任何数a用任何数b连续做两次异或, 仍得到a本身, 异或最重要的性质

异或的应用

两数交换
例如交换两个变量的值且不引入中间变量, 可用如下表达式:
假设A的值为a, B的值为b
A = A^B (a^b)
B = A^B (a^b ^ b)
A = A^B (a^b ^ a)
即运用了异或的自反性, 类似的该运算还可以应用在加密, 数据传输, 校验等许多领域
找到出现奇数次的数
一个数组有若干整数, 一个数出现奇数次, 其余均出现偶数次, 找到这个出现奇数次的数, 就可以把所有数异或, 最后结果就是要找的数, 同样是应用异或的自反性
反转指定位
比如将x的低四位进行反转, 只需要找另一个数y, 令y的低4位为1, 其余位为0, 然后x和y进行异或, 即可得到

取反运算

~, 取反, 0变1, 1变0

用途

使一个数的最低位置零, 可以使用a & ~1, 1取反的值为最低位是0其余位都是1, 再和a与运算, 得到最低位为0, 其余位不变

~运算符优先级比算术运算符(加减乘除), 关系运算符(大小等于), 逻辑运算符(与或非)和其他运算符(三目运算符)都高

左移

<<, 左移, 各个二进制位全部向左移动若干位, 高位丢弃, 低位补0

若左移时舍弃的高位不包含1, 则每左移一位相当于该数乘以2

右移

>>, 右移, 各个二进制位全部向右移动若干位, 对无符号的数, 高位补0, 对有符号数, 各编译器处理方法不一, 有的补符号位, 有的补0

操作数每右移一位, 相当于该数除以2

运算规则

不同长度的数据进行位运算, 如果两个不同长度的数据进行位运算时, 系统会将二者按右端对齐, 然后进行位运算
右端对齐后, 左边不足的位

  • 如果整型数据为正数, 左边补0
  • 如果整型数据为负数, 左边补1
  • 如果整型数据为无符号数, 左边也补0
打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2017-2023 王丹鹏
  • Powered by Hexo Theme Ayer
  • 冀ICP备15029707号

请我喝杯咖啡吧~

支付宝
微信