java基础---位运算

位运算

按位与 &

两个操作数,同为1则结果为1,否则为0。

例:

-10 & 8

10001010 (-10原)

11110110(-10补)

00001000(8补)

———————

00000000

注:

  • 负数原码与补码相互转换的简便规则为:从右向左找到第一个1,将其左边的数值位全部取反,右边的保持不变,符号位不变。
  • 运算操作要用补码

按位或 |

两个操作数,同为0则结果为0,否则为1。

例:

-12 | -10

10001100(-12原码) 10001010(-10原码)

11110100(-12补码)

11110110(-10补码)

——————————

111101110(补码)

10001010(原码)

结果为-10

按位取反 ~

所有位都取反

异或运算 ^

两个操作数,相同为0,不同为1。

移位运算

左移

右边空出来的位用0填补,最高位左移溢出则舍弃该高位

左移几位其实就是这个数 *2的几次幂

有符号右移 >>

左边空出来的位用0或1填补,整数用0负数用1填补。

右移几位其实就是这个数 /2的几次幂 ---->除法

重点面试题:

用最快速度计算出2*16的值

public class yiwei {
    public static void main(String[] args){
        long startTime = System.nanoTime();
        System.out.println(2*16);
        long endTime = System.nanoTime();
        System.out.println("程序运行时间:"+(endTime-startTime)+"ns");

        long startTime1 = System.nanoTime();
        System.out.println(2<<4);
        long endTime1 =System.nanoTime();
        System.out.println("程序运行时间:"+(endTime1-startTime1)+"ns");
    }
}

运行结果:

可以看出,移位运算的速度更快

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值