Java中的按位操作——Java编程思想笔记

欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/40450421

Java中的按位操作符有四个,分别是:&(按位与)、|(按位或)、^(按位异或)、~(按位非)。

1、先来看按位与(&)

public class Main {

    public static void main(String[] args) {

        //按位与,两1得1,遇0得0
        System.out.println(Integer.toBinaryString(13));
        System.out.println(Integer.toBinaryString(11));
        System.out.println(Integer.toBinaryString(13&11));

    }
}

结果为:

1101
1011
1001

从结果可以清晰的看到,与的规则为:两位相与,若有一位为0,则结果为0,否则为1。

2、然后是按位或(|)

<span style="font-size:18px;">public class Main {

    public static void main(String[] args) {

        //按位或,两0得0,遇1得1
        System.out.println(Integer.toBinaryString(13));
        System.out.println(Integer.toBinaryString(11));
        System.out.println(Integer.toBinaryString(13|11));

    }
}</span>

结果为:

1101
1011
1111

这样就得到了按位或的结果

3、接下来是按位异或

public class Main {

    public static void main(String[] args) {

        //按位异或:两位不同得1,两位相同得0
        System.out.println(Integer.toBinaryString(13));
        System.out.println(Integer.toBinaryString(11));
        System.out.println("0"+Integer.toBinaryString(13^11));

    }
}

结果为:

1101
1011
0110

不同得1,相同得0

按位异或有一个有意思的用法,它可以不用第三方变量,交换两数的值,如下

public class Main {

    public static void main(String[] args) {

        //使用按位异或交换两数的值
        int temp1=10;
        int temp2=114;
        System.out.println("交换前:temp1:"+temp1);
        System.out.println("交换前:temp2:"+temp2);
        temp1^=temp2;
        temp2^=temp1;
        temp1^=temp2;
        System.out.println("交换后:temp1:"+temp1);
        System.out.println("交换后:temp2:"+temp2);

    }
}

结果为:

交换前:temp1:10
交换前:temp2:114
交换后:temp1:114
交换后:temp2:10

这个是有依据的,这样来看,

第一步:temp1^=temp2,即temp1=temp1^temp2

第二步:temp2=temp2^temp1=temp2^(temp1^temp2),异或满足交换律,去括号后最后得到temp2=temp1

第三步:temp1=temp1^temp2=(temp1^temp2)^temp2=temp1^temp2^temp1=temp2

经过这三步,顺利交换了两变量的值。

这个方法告诉我们,可以在C++中这样实现swap函数

    int swap(int &a, int &b){
        a^=b;
        b^=a;
        a^=b;
    }

这里使用了传引用,当然你也可以用传指针的方式实现

4、最后是按位非(~)

public class Main {

    public static void main(String[] args) {

        //按位非:逐位取反
        System.out.println("0000000000000000000000000000"+Integer.toBinaryString(13));
        System.out.println(Integer.toBinaryString(~13));

    }
}

结果为:

00000000000000000000000000001101
11111111111111111111111111110010

欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/40450421

时间: 2024-08-03 23:33:03

Java中的按位操作——Java编程思想笔记的相关文章

Java编程思想笔记(第二章)

第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(reference)操作对象 类似遥控器(引用)来操作电视(对象) 在Java中你可以创建一个引用,但是没有与任何对象关联,比如: String s; 这个时候如果用则会报错.安全的做法是: 创建一个引用的同时并进行初始化 String s="1111"; 必须由你创建所有对象 New关键字的意思是给我一

java编程思想笔记(第一章)

Alan Kay 第一个定义了面向对象的语言 1.万物皆对象 2.程序是对象的集合,他们彼此通过发送消息来调用对方. 3.每个对象都拥有由其他对象所构成的存储 4.每个对象都拥有其类型(TYpe) 5.某一特定类型的所有对象都可以接收同样的消息. Booch提出一种更简洁的描述: 对象拥有状态(state) 行为(behavior) 和标识(identity) 每个对象都有一个接口 每个对象都属于定义了特性和行为的某个类(特性可以理解为属性的状态,行为可以理解为method) 在面向对象的程序设

java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码

代码下载地址:http://www.zuidaima.com/share/1838230785625088.htm 原文:java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码 最近由于zuidaima.com注册用户的增多,qq企业邮箱发送邮件会被封禁账号导致注册后面的用户收不到周总结,所以紧急开发了一套多账号,多服务器发送邮件的程序. 大概的设计思路如下: 1.服务器可以无限扩展,但由于qq企业邮箱是限定域名,所以要想多服务器还得有多域名,多账号也不行. 2.最

7.JAVA编程思想笔记隐藏实施过程

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040237 "进行面向对象的设计时,一项基本的考虑是:如何将发生变化的东西与保持不变的东西分隔开." Java 推出了"访问指示符"的概念,允许库创建者声明哪些东西是客户程序员可以使用的,哪些是不可使用的.这种访问控制的级别在"最大访问"和"最小访问"的范围之间,分别包括:public,"友好的

java 编程思想笔记(二)——初始化

一.问题 随着计算机革命的发展,"不安全"的编程方式已逐渐成为编程代价高昂的主因之一. 初始化和清理正是涉及安全的两个问题. 二.java 解决方案 构造器:一种特殊的方法.java 中"初始化"和"创建"捆绑在一起,两者不能分离. 垃圾回收器:释放无用的对象. 三.方法重载 为什么要在这里讲方法重载?我觉得首先:构造器是一种特殊的方法,再一个,构造器除了默认构造器还有有参构造器.为了让方法名称相同而形式参数不同的构造器同时存在,就必须用到方法重

Java中基于HTTP协议网络编程

java中为我们的网络支持提供了java.net包,能够使我们以编程的方式来訪问Web服务功能,这篇博客,就跟大家分享一下.Java中的网络编程的知识.主要是学习下该java.net包下的API. URI-->URL URI:表示的是统一的资源标识,它是以某种统一的方式标识资源的简单字符串. 这样的字符串以scheme开头. URL:表示统一的资源定位器的任务,URL是一种URI. URN:一般不能为资源提供持久不变的名称.这是统一的资源命名的任务.URN也是一种URI,但它是全球唯一的.持久不

java垃圾回收期如何工作(编程思想)

垃圾回收器如何工作: 在以前的程序语言中,在堆上分配对象的代价十分昂贵,因此读者会自然觉得对Java中所有对象(基本类型除外)都在堆上分配的方式也非常高昂.然而,垃圾回收期对提高对象的创建速度,却具有明显的效果. 打个比方,你可以吧C++里面的堆想象成一个院子,里面的每个对象都负责管理自己的地盘.一段时间之后,对象可能被销毁,但地盘必须加以重用.在某些Java虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个对象,它就往前移动一格.这意味着对象存储空间的分配速度非常快.Java的"堆指针&

java编程思想笔记--第一个java程序

// Property.java import java.util.*; public class Property { public static void main(String[] args) { System.out.println(new Date()); Properties p = System.getProperties(); p.list(System.out); System.out.println("--- Memory Usage:"); Runtime rt

Java中的TCP/UDP网络通信编程

127.0.0.1是回路地址,用于测试,相当于localhost本机地址,没有网卡,不设DNS都可以访问. 端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口. 网络应用中基本上都是TCP(Transmission Control Protocol传输控制协议)和UDP(User Datagram Protocol用户数据报协议),TCP是面向连接的通信协议,UDP是无连接的通信协议. Socket连接套接字,