我是靠谱客的博主 朴实灰狼,最近开发中收集的这篇文章主要介绍Java 位运算总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在Java语言中,二进制使用补码表示,最高位是符号位,正数为0,负数为1。

其中:

  1. 正数的最高位是0,其余各位代表数值本身
  2. 负数的最高位是1,通过该数绝对值的补码按位取反,再对整个数加1

Java中的位移操作,只对int类型的数据生效(对byte,short,char,long的支持是转换成int后生效)。

一个int是4个字节,一个字节8位,总共32位。

在日常的开发中,位运算使用的不多,但是合理的使用,会使得代码大大简化。

比如在判断状态是0还是1时,在和0和1之间相互切换,可以直接使用原始值进行异或操作 1^n。

Java支持的位运算符主要包括:

  1. |或
  2. &且
  3. ~非
  4. ^异或
  5. <<左移
  6. >>右移
  7. >>>无符号右移

| 按位或

只要有1个为1,值就为1


// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// |
有一个为1,值就为1
0000 1111
System.out.println(7|9);

& 按位且

同时为1,才是1


// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// &
同时为1,才是1
0000 0001
System.out.println(7&9);

~ 按位非

1变为0,0变为1


// 7 的二进制:
0000 0000 0000 0000 0000 0000 0000 0111
// ~
0变1,1变0 1111 1111 1111 1111 1111 1111 1111 1000
System.out.println(~7);

^ 按位异或

相同为0,不同为1


// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// ^
相同则为0,不同为1
0000 1110
System.out.println(7^9);

<< 按位左移

左移,右侧补0


// 7 的二进制: 0000 0111
// 9 的二进制: 0000 1001
// <<
左移2位,右侧补0
0010 0100
System.out.println(9<<2);

>> 按位右移

右移,如果是正数,左侧补0;如果是负数,左侧补1


// 9 的二进制: 0000 1001
// >>
右移2位,9为正数,高位全部补0
0000 0010
System.out.println(9>>2);
// -9 的二进制: 1111 1111 1111 1111 1111 1111 1111 0111
// >>
右移2位,-9为负数,高位全部补1
1111 1111 1111 1111 1111 1111 1111 1101
System.out.println(-9>>2);

>>> 无符号右移

和右移的区别在于,符号位也跟着右移。


// -1 表示 1111 1111 1111 1111 1111 1111 1111 1111
System.out.println(-1>>1);
System.out.println(-1>>>1);
System.out.println(-1>>>2);
System.out.println(-1>>>3);

运行结果是:

-1
2147483647
1073741823
536870911

 

最后

以上就是朴实灰狼为你收集整理的Java 位运算总结的全部内容,希望文章能够帮你解决Java 位运算总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部