快速业务通道

Java编程那些事儿25—位运算符 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

Java编程那些事儿25—位运算符

时间:2010-02-27 csdn博客 陈跃峰

4.5 二进制运算符

由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。

使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多,该类运算符大量适用于网络编程、硬件编程等领域。

二进制运算符在数学上的意义比较有限。

在Java代码中,直接书写和输出的数值默认是十进制,Java代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字0开头,例如016,十六进制以数字0和x开头,例如0x12,0xaf等等。

在计算二进制运算时,Java语言的执行环境(JRE)首先将十进制的数字转换为二进制,然后进行运算。如果输出结果的值,则数字会被转换成十六进制进行输出。

需要注意的是:

1、正数的机器数是原码,负数的机器数是补码,计算时需要小心。关于二进制和补码的计算可以参看《Java编程那些事儿7——进制的概念》和《Java编程那些事儿8——计算机内部的数据表达》。

2、整数型的计算结果都是int型,而不管是对byte还是short进行二进制运算。

4.5.1 位运算符

Java语言中的位运算符主要有4种:&(位与)、|(位或)、^(异或)和~(按位取反),下面依次介绍运算规则和使用示例。

l&(AND)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为1,则运算结果为1,否则为0。

适用场合:屏蔽数字中某一位或某些位。因为任何数和0与都是0。

示例代码:

int a = 4; int b = 10; int c = a & b;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

10的二进制形式为0000 0000 0000 0000 0000 0000 0000 1010

按照计算规则,结果为0000 0000 0000 0000 0000 0000 0000 0000

这个数字转换为十进制就是数字0

l| (OR)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为1则为1,否则为0。

适用场合:将数字中某一位或某些位修改成1。因为1和任何数或都是1。

示例代码:

int a = 4; int b = -10; int c = a | b;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

10的二进制形式为1111 1111 1111 1111 1111 1111 1111 0110

按照计算规则,结果为1111 1111 1111 1111 1111 1111 1111 0110

这个二进制数转换为十进制就是数字-10。

Java编程那些事儿25—位运算符(2)

时间:2010-02-27 csdn博客 陈跃峰

l^(XOR)

运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为1。

适用场合:判断数字对应的位是否相同。

示例代码:

int a = 4; int b = 10; int c = a ^ b;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

10的二进制形式为0000 0000 0000 0000 0000 0000 0000 1010

按照计算规则,结果为0000 0000 0000 0000 0000 0000 0000 1110

这个数字转换为十进制就是数字14

l~(NOT)

运算规则:只操作一个数字,将该数字中为1的位变成0,为0的位变成1。

适用场合:反转数字的内容

示例代码:

int a = 4; int c = ~a;

计算过程:

4的二进制形式为0000 0000 0000 0000 0000 0000 0000 0100

按照计算规则,结果为1111 1111 1111 1111 1111 1111 1111 1011

这个数字转换为十进制就是数字-5。

其实位运算和实际的应该实现保持一致,也就是提供的电路级运算符号,每种运算符都有对应的电路实现。

实际使用简单示例:

l把任意数字转换为正数

假设n是一个任意的整数,则把n转换为正数的代码为:

int m = n & 0x7fffffff;

l判断任意数字倒数第三位的值是否为1

假设n是一个任意的整数,则判断的代码为:

int m = n & 0x4; boolean b = (m != 0);

l将任意数字倒数第四位置为1

假设n是一个任意的整数,则代码为:

int m = n | 0x8;

文章来源:http://blog.csdn.net/Mailbomb/archive/2008/05/29/2492361.aspx

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号