如何在Java中使用位运算

  介绍

如何在Java中使用位运算吗?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一位运算的分类与展现效果

Java位运算可以分为左移和右移,其中右移还有无符号右移。

如何在Java中使用位运算“> <br/> ?</p> <p> java只对整型位移,可以分为int体系和长体系相关性体系包括(字节,短、int、char),长体系只包含long.int体系中进行位运算时,除int类型外都会先转换为int再进行运算. .<br/>无符号右移指的是,向右移动时,左边补位的是0。<br/>一般来说,右移左移常用作乘2 n或者除以2 n。(右移除以2 n,左移乘以2 n) </p> <pre类= int  i1 =, 4,,   int  r1 =, i1 在祝辞,2,,//,除以2 ^ 2   int  r2 =, i1  & lt; & lt;, 2,,//,乘以2 ^ 2   System.out.println (r1);//, 1   System.out.println (r2);,//, 16

二,原理

位运算实际上是将数值对应的二进制进行左右位移操作. java中数值的存储、运算是以补码的形式进行的。数值有三种存储方式:原码,反码,补码。

原码的最高位为符号位(0为正数,1为负数),其余位用于存储数值,以8位整型为例,2对应:

0000, 0010

2对应:

1000, 0010

? ?反码和补码的正数都与原码相同。反码的负数在原码的基础上进行,除符号位外,其余按位取反,例如2的反码为:

0000, 0010(正数不变)

2的反码为:

1111, 1101

补码在反码的基础上进行,反码加1就变成补码。

2:

0000, 0010(正数不变)

2为:

1111, 1110

8位整型,反码可以表示的范围为:[-128127]

-128年的反码表示为:

1000, 0000

可以理解为:

1, 1000年,0000年(原),=祝辞,1,0111,1111(反),=祝辞,1,1000,0000(补),=祝辞,1000,0000(补)

(查看了一些解释,-128的补码规定为1000 0000,若不理解,可以先跳过)。

左移即是补码向左移动,右边空出的用0补位,右移就是向右动,左边空出来的以符号位补位。(无符号右移,左边空出来的以0补位)。下面以具体代码举例(int为32位):

正数:

int  i1 =, 4,,//, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0100   int  r1 =, i1 在祝辞,2,,//,期望,0000,0000,0000,0000,0000,0000,0000,0001,=,1   int  r2 =, i1  & lt; & lt;, 2,,//,期望,0000,0000,0000,0000,0000,0000,0001,0000,=,16岁   System.out.println (r1);,//,实际:1   System.out.println (r2);,//,实际:16

负数:

int  i2 =, 4,,//, 1111, 1111, 1111, 1111, _ , 1111, 1111, 1111, 1100   int  r3 =, i2 在祝辞,2,,//,期望:1111,1111,1111,1111,_ , 1111, 1111, 1111, 1111,=, 1   int  r4 =, i2  & lt; & lt;, 2,,//,期望:1111,1111,1111,1111,_ , 1111, 1111, 1111, 0000,=-16   int  rx =, i2 在祝辞祝辞,1,,//,期望:,0111,1111,1111,1111,_ , 1111, 1111, 1111, 1110,=, 2147483646   System.out.println (rx);,//,实际:2147483646   System.out.println (r3);,//,实际:1   System.out.println (r4);,//,实际:-16

rx记录无符号右移结果,移动后左边补位以0补满,于是结果就变成了2147483646

三,边界值测试

int类型的范围为(-2147483648,-2147483648),下面对上下界分别进行测试:

//,边界值测试:   int  imax =, Integer.MAX_VALUE;,//, 21 _4748_3647 =, 0111 _1111_1111_1111_1111_1111_1111_1111 (2 ^还有)      int  r5 ,=, imax 在祝辞,2,,//,0001 _1111_1111_1111_1111_1111_1111_1111 =,(2 ^ 30,安康;1),5 _3687_0911=,      System.out.println (r5);//,实际:5 _3687_0911      int  r6 =, max  & lt; & lt;, 2,,//, 1111 _1111_1111_1111_1111_1111_1111_1100 (补码形式,),=4      System.out.println (r6);//,实际:4      int  imin =, Integer.MIN_VALUE;//-21 _4748_3648=1000 _0000_0000_0000_0000_0000_0000_0000      int  r7 =, imin  & lt; & lt,, 1,,//, 0000 _0000_0000_0000_0000_0000_0000_0000 =0      System.out.println (r7);,//,实际:0 Java的优点是什么

1。简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2。面向对象;3。分布性,Java是面向网络的语言;4。鲁棒性、java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。5。安全性,用于网络,分布环境下的Java必须防止病毒的入侵。6。体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7。可移植性、Java可以方便地移植到网络上的不同机器。8。解释执行,Java解释器直接对Java字节码进行解释执行。

如何在Java中使用位运算