位运算以及位运算的应用

位运算是计算机科学中的基本操作,涉及原码、反码、补码的概念。本文详细介绍了位运算的符号、优先级及进阶用法,如改变位、截取和负数运算,并探讨了如何判断是否为2的n次幂、实现高效乘法和交换数等高级应用。在算法中,位运算能用于解决复杂问题,例如在LeetCode的某些题目中。
摘要由CSDN通过智能技术生成

位运算

什么是位运算

在计算机系统中,所有数据都是以二进制的形式进行存储,位运算就是对二进制中进行操作。所有的计算都是通过位运算进行实现的。

整数在计算机中

原码

原码是最简单的表示法,对于一个整数而言,最高位代表数据的正负,其他数位代表数据

比如对于一个8位二进制而言 , 00000010代表有符号整数和没符号整数的 2
10000010 代表有符号整数的的-2和没符号整数的 130

原码可以让我们更容易看出一个二进制的数值,但是也导致了 正数0和负数0的重合,比如 0000000010000000表示 +0和 -0,在数学中,都表示0.但是与在计算机中没一个数字代表唯一的数位是相悖的,这容易造成数位的加减问题

反码

反码是原码转向补码的中间状态, 正数的反码为本身,负数的反码为除了符号位其他位取反 这解决了加减的问题

比如 -1 + 1,转化为反码就是 111111110 + 0000000001 加起来为 11111111-0的反码,但是未解决0的问题。

补码

正数的补码是他原码,也是他的反码。负数的补码是反码加1。 计算机存储都是以补码的形式存储的,

这个就很好解决了0 和 负数加减的问题。

比如 在8位二进制表示的数中, -1 的原码为 10000001。反码为 11111110,那么他的补码为 111111111,从补码我们可以看出,如果 -1 + 1,可以很简单的转化为 00000000,对应原码中的正数0,很好的解决了两个0的情况,也很好解决了数据的加减问题。

位运算

位运算的符号

符号 描述 规则 例子
& 两位想与,两位同时为1则为1 0 & 1 = 0, 1& 1 = 1, 0 & 0 = 0
| 两位想或,有一个为1,则为1 0 | 1 = 1, 1 | 1 = 1, 0 | 0 = 0
^ 异或 两位相同为0,两位不同为1 0 ^ 1 = 1, 0 ^ 0 = 0, 1 ^ 1 = 1
~ 取反 0取反为1 ,1 取反为0 ~0 = 1 , ~1 = 0
~(^) 同或 相同为1,相反为0 实际上对异或取反,取决于当前一共有多少位
<< 左移 向左移动一位 1 << 1 = 2, -1 << 1 = -2
>> 右移 向右移动一位 2 >> 1 = 1 , -2 >> 1 = -1
>>> 无符号右移 不带符号向右移动一位 2 >>> 1 = 1 ,-2 >>>1 = 2147483647

位运算的优先级

<
优先级 符号 描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值