java中num 2_Java里位操作总结

我们都知道计算机里的数据都是以二进制形式存储的,所谓的位运算可以理解为直接对内存中的二进制数据进行操作,所以速度会比较快。

这边先写个二进制输出方法

private static void printBinaryNumber(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

2

3

4

5

6

7

8

9

10

11

12

privatestaticvoidprintBinaryNumber(intn){

Stringnum=Integer.toBinaryString(n);

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

System.out.println(num);

}else{

StringBuildersb=newStringBuilder("");

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

sb.append("0");

}

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

}

}

位操作符介绍

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

int num = 5;

printBinaryNumber(num);

printBinaryNumber(~num);

1

2

3

intnum=5;

printBinaryNumber(num);

printBinaryNumber(~num);

结果

0bacc6fcce6d058480fe18061e338df5.png

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

int num1 = 5;

int num2 = 6;

printBinaryNumber(num1);

printBinaryNumber(num2);

printBinaryNumber(num1 & num2);

1

2

3

4

5

intnum1=5;

intnum2=6;

printBinaryNumber(num1);

printBinaryNumber(num2);

printBinaryNumber(num1&num2);

结果

c35d75bc599c5203376fd0d7498ddc2f.png

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

int num1 = 2;

int num2 = 9;

printBinaryNumber(num1);

printBinaryNumber(num2);

printBinaryNumber(num1 | num2);

1

2

3

4

5

intnum1=2;

intnum2=9;

printBinaryNumber(num1);

printBinaryNumber(num2);

printBinaryNumber(num1|num2);

结果

dfa993d5df142b3c199748daeae7ba2e.png

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

int num1 = 3;

int num2 = 9;

printBinaryNumber(num1);

printBinaryNumber(num2);

printBinaryNumber(num1 ^ num2);

1

2

3

4

5

intnum1=3;

intnum2=9;

printBinaryNumber(num1);

printBinaryNumber(num2);

printBinaryNumber(num1^num2);

结果

2cd1016f84d2089ed5534a6acb36acb1.png

5、<

int num = 3;

printBinaryNumber(num);

printBinaryNumber(num << 2);

1

2

3

intnum=3;

printBinaryNumber(num);

printBinaryNumber(num<<2);

结果

5318e0b20bc748e2700326a8e772c27a.png

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

int num = 4;

printBinaryNumber(num);

printBinaryNumber(num >> 2);

1

2

3

intnum=4;

printBinaryNumber(num);

printBinaryNumber(num>>2);

结果

c3d8f372ce15cbba2ea805c890a50b86.png

常见的位操作应用

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

int num1 = 3;

int num2 = 9;

num1 = num1 ^ num2;

num2 = num2 ^ num1;

num1 = num1 ^ num2;

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

1

2

3

4

5

6

intnum1=3;

intnum2=9;

num1=num1^num2;

num2=num2^num1;

num1=num1^num2;

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

结果

e9258ed86dc96205a4e97d14aa3a1870.png

2、求2的N次方

//求2的16次方:

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

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

1

2

3

//求2的16次方:

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

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

结果

0744c1c9100e9c3940aea725792ccd45.png

3、判断奇数偶数

int num1 = 2;

int num2 = 7;

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) ? "奇数" : "偶数");

1

2

3

4

5

6

7

8

9

intnum1=2;

intnum2=7;

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)?"奇数":"偶数");

结果

07fba6f24e59b402bfef21773f9987db.png

4、求绝对值

int num = -9;

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

int i = num >> 31;

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

1

2

3

4

intnum=-9;

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

inti=num>>31;

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

结果

7fe757101c459304c7689c8c03c1ef04.png

浏览量:

94

0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值