登录  /  注册
首页 > Java > java教程 > 正文

Java位运算的介绍(代码示例)

不言
发布: 2019-03-07 17:38:16
转载
2224人浏览过

本篇文章给大家带来的内容是关于Java位运算的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

  我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1。也就是我们常说的:二进制。二进制相信大家都很熟悉。与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十进一,这些都是我们熟悉的。到这里,我们就会发现端倪,现实世界中的十进制与计算机中的二进制其计量单元是不一样的。那它们之间怎么转换呢?这就涉及到一些比较基础的计算机知识。不在本文中讨论(如果有兴趣,可以在下次讲讲)。嗯,回到今天的主题,来说说位运算,这又是一个怎样的概念呢?我们从小就开始接触,现实世界中的加减乘除这些运算,也就是十进制中的运算。今天我们要说的是:二进制位中的一些常用运算。例如:& (位与),| (位或) ,^(异或),<<(左移),>>(右移) 等等。

真与假
 在进行运算符使用之前,我们有必要说下真假。在Java中,我们都知道,用 true 值表示真,false 值表示假。其实在计算机中,通常使用 1 表示真,0表示假。使用过Json的同学应该知道,Java中的boolean类型,用1也是可以反序列化成true,0反序列化为false的。

& (位与)
  在说位与之前,我们先来说说我们熟悉的 && 逻辑与操作。简单来说: A&&B  也就是:A且B同时成立时为真,否则为假。也有人称之为:“一假必假”。

现在我们再来看位与。首先,我们来看一段程序:

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a&b));
    System.out.println("a & b result: "+(a&b));
}
登录后复制

再看解释之前,我们先猜猜结果是多少?

代码解释:

位与:我们从字面意思上来理解,也是二进制位的与操作。

数字 8 的十进制是: 1000 。

数字 9 的十进制是: 1001。

我们再来进行位于操作:

如下所示:

8:1000
9:1001
&
8  1000

最左边的 1&1 = 1,中间的 0&0 = 0,最右边的0&1 = 0。

二进制的结果为:1000,转换为10进制后为 8。

程序运行结果如下:

a binary: 1000
b binary: 1001
a & b binary: 1000
a & b result: 8

结果是符合预期的。

| (位或)

上面说 & (位与) 操作,现在我们来看看位或操作,继续使用上面的例子:如下所示:

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a|b));
    System.out.println("a & b result: "+(a|b));
}
登录后复制

再看看二进制:

8:1000
9:1001
|
9  1001
最左边的 1|1 = 1,中间的0|0 = 0 ,最右边的 0|1 = 1。

结果二进制为: 1001 对应的10进制为 9。

运算结果如下:

a binary: 1000
b binary: 1001
a & b binary: 1001
a & b result: 9

^(异或)

这个运算符比较有意思,异从字面上来理解是:不同的。放在位操作里也是一样的。继续使用上面的例子:

@Test

public void testBit(){
    int a = 8;
    int b = 9;
    System.out.println("a binary: "+Integer.toBinaryString(a));
    System.out.println("b binary: "+Integer.toBinaryString(b));
    System.out.println("a & b binary: "+Integer.toBinaryString(a^b));
    System.out.println("a & b result: "+(a^b));
}
登录后复制

继续看二进制:

8:1000
9:1001
^
1  0001

位相同时取假,不同时取真。左边的 1=1 相同取假,也就是0。中间的0=0 也为假为0。最右边的0不等于1,为真。结果也就为1。

<<(左移)

在现实世界里,我们经常使用乘法。<< 则表示二进制中的位移操作,低位补0。例如:8<<1。

@Test

public void testCode(){
    int a =8;
    System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
    System.out.println("a<<1 toBinaryString: "+Integer.toBinaryString(a<<1));
    System.out.println("result: "+(a<<1));
登录后复制

二进制如下:

8 1000
8<<1
16 10000

结果为: 2^4 = 16。 << 左边 a 表示基数, 右边 1 则表示需要位移动的位数。 箭头指向哪边,则向哪边位移。程序运行结果:

a toBiryString: 1000
a<<1 toBinaryString: 10000
result: 16

>> 右移

(右移) 与左移 << 则是相反的,高位补0 。继续上面的例子:

@Test

public void testCode(){
    int a =8;
    System.out.println("a toBinaryString: "+Integer.toBinaryString(a));
    System.out.println("1>>a toBinaryString: "+Integer.toBinaryString(a>>1));
    System.out.println("result: "+(a>>1)
}

二进制:

8 : 1000
8>>1
4 : 0100

运行结果:

a toBinaryString: 1000
a>>1 toBinaryString: 100
result: 4

其实这里还有一个比较好记的口诀:

a>>n 则表示: a / (2^n) 次方。  (取整)

a<

现在我们来速算一下:

当a = 13, n = 2 时。13<<2 等于  13* 4 = 52 。 13/4 = 3。

(上述速算法,如有错误,欢迎打脸!!!)


我们在源码以及常见算法中位移运算是非常常见的,一位Java程序员掌握位运算也是很有必要的。这对我们算法,源码理解都非常有帮助!


以上就是Java位运算的介绍(代码示例)的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:segmentfault网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
请问config未定义的问题怎么解决
P粉805222539来自于2023-12-17 13:31:23
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学