位运算专题

位运算补充

基础

  1. 位运算是针对整数的二进制进行的位移操作
  2. 整数32位,最高位是符号位,正数的符号为0,负数的是1;十进制转二进制,不足32位的,最高位写符号位,其它位补0
  3. Java中,整数的二进制是以补码的形式存在的
  4. 位运算计算完,还是补码的形式,要转成原码,才能得出十进制数
  5. 正数:原码=反码=补码,三码合一
  6. 负数:反码=原码忽略符号位按位取反,补码=反码+1

例如:十进制4转成二进制补码在计算机表示为补码: 00000000 00000000 00000000 00000100

例如:十进制-4转成二进制补码在计算机表示为补码: 11111111 11111111 11111111 11111100

负数转二进制补码过程(-4为例子)

原码:10000000 00000000 00000000 00000100 (绝对值转二进制,最高位符号位为1)

反码:11111111 11111111 11111111 11111011 (符号位不变,其它位置按位取反)

补码:11111111 11111111 11111111 11111100 (反码+1)

画板

位运算

左移(<<) 整体左移,右边空出位置补零,左边位舍弃(-4<<1=-8)

画板

右移(>>) 整体右移,左边空出位补零或是补1(负数补1正数补0),右边舍弃,(-4>>1=-2)

画板

无符号右移,左边位置都补零无论正负数,右边舍弃(-4>>>1 = 2147483646)

画板

与( & )每一位进行比较,两位都为1,结果为1,否则为0(-4 & 1 = 0)

画板

或( | )每一位进行比较,两位有一位是1,结果就是1(-4 | 1 = -3)

画板

非( ~ ) 每一位进行比较,按位取反(符号位也要取反)(~ -4 = 3)

画板

异或( ^ )每一位进行比较,相同为0,不同为1(1^ -4 = -3)

画板

正数的左移运算:M<<N = M*2^N,乘法运算转成位运算

4<<2 =4*2^2=16

画板

正数的右运算:M>>N = M/2^N,除法运算转成位运算

4>>2 =4/2^2=1

画板

正数通过

画板

1左移N位后减1可快速得到低N位都是1的正数,1<<16 -1

画板

正数N如何取低16位:N&(1<<16-1)
正数N如何取高16位:N&~(1<<16-1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值