java 操作位_java位操作总结

在计算机中所有数据都是以二进制的形式储存的。

位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。

方便演示,首先写个二进制打印方法:

private static void printNum(int n){

String num = Integer.toBinaryString(n);

if(num.length() == 32){

System.out.println(num);

}else{

StringBuilder sb = new StringBuilder("");

for(int i =0;i < 32 - num.length(); i ++){

sb.append("0");

}

System.out.println(sb.toString() + num);

}

}

1、~操作符(取反),对应二进制位取反,0变成1,1变成0

int num = 3;

printNum(num);

printNum(~num);

结果如下:

00000000000000000000000000000011

11111111111111111111111111111100

2、&操作符(与),对应二进制位进行与操作,都为1时变成1,其他变为0

int num1 = 3;

int num2 = 7;

printNum(num1);

printNum(num2);

printNum(num1 & num2);

结果如下:

00000000000000000000000000000011

00000000000000000000000000000111

00000000000000000000000000000011

3、|操作符(或)对应二进制位进行或操作,都为0时变成0,其他变为1

int num1 = 4;

int num2 = 7;

printNum(num1);

printNum(num2);

printNum(num1 | num2);

结果如下:

00000000000000000000000000000100

00000000000000000000000000000111

00000000000000000000000000000111

4、^操作符(异或),对应二进制位相同时,该位变成0,否则变成1

int num1 = 5;

int num2 = 9;

printNum(num1);

printNum(num2);

printNum(num1 ^ num2);

结果如下:

00000000000000000000000000000101

00000000000000000000000000001001

00000000000000000000000000001100

5、<

int num1 = 5;

printNum(num1);

printNum(num1 << 2);

结果如下:

00000000000000000000000000000101

00000000000000000000000000010100

6、>>操作(右移),二进制位向右移动,左边填充0

int num1 = 5;

printNum(num1);

printNum(num1 >> 2);

结果如下:

00000000000000000000000000000101

00000000000000000000000000000001

位操作常见应用

1、不使用中间变量交换两个数

int num1 = 2;

int num2 = 5;

num1 = num1^num2;

num2 = num2^num1;

num1 = num1^num2;

System.out.println("num1:" + num1 +"\n"+ "num2:" + num2 );

2、求2的N次方

//求2的32次方:

System.out.println(Math.pow(2, 32));

System.out.println(1L<<32);

3、判断奇数偶数

int num1 = 4;

int num2 = 9;

if(num1%2 == 0){

System.out.println("偶数");

}else{

System.out.println("奇数");

}

System.out.println((((int)num1&1) == 1) ? "奇数" : "偶数");

System.out.println((((int)num2&1) == 1) ? "奇数" : "偶数");

4、求绝对值

int num = -3;

System.out.println(Math.abs(num));

int i = num >> 31;

System.out.println(i == 0 ? num : (~num + 1));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值