`
jianchen
  • 浏览: 344877 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java基础复习(7)--值传递和交换变量值(异或)

阅读更多

对于java中的方法参数传递是传值方式,最典型的是,java中无法实现交换两个数值的方法,但C#和C++可以。C++总所周知是通过指针可以直接访问实参。而C#使用ByRef声明就可以实现。

不利用自己提供的临时变量,两个数交换:
方法一:
a = a+b;
b = a-b;
a = a-b;
但是这样需要考虑到a+b溢出的问题。
还有可以利用异或运算实现。

方法二:
void swap(int &a,int &b)
{
      a^=b;
     b^=a;
     a^=b;

}

原理理解如下:

               a-------------------------b
a^=b    a^b-----------------------b
b^=a    a^b-------b^(a^b) => a
a^=b    a^b^(a) => b-----------a

OK           b-------------------------a


要知道,a^b=c  =>  a^c=b;a^c=b;

即只要直到a,b,c中的任意两个,即可利用异或运算退出另外一个数。

RAID里面就用到了这技术。三个里面知道任意两个就可以恢复第三个,磁盘位的恢复的一种手段。



数学上的原理如下:

^ 在 C 里面是按位异或操作符。异或运算的原理应该清楚吧?相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:

a = 0101   (5 的二进制表示)
b = 1100   (12 的二进制表示)
    ----
c = 1001   (结果为 9)

有两个定理:
任何一位二进制数同 1 异或都会变成另外一个(0 同 1 异或的结果是 1,1 同 1 异或的结果是 0)
任何一位二进制数同 0 异或都保持不变(0 同 0 异或的结果是 0,1 同 0 异或的结果是 1)

因为 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那么 a 同 c 异或的结果就是 a 中与 b 不同的位发生变化,二进制数每位只有两种状态,所以 a 变成了 b:

a = 0101
c = 1001
    ----
b = 1100

同样, b 与 c 异或结果就变成了 a:

b = 1100
c = 1001
    ----
a = 0101


今 天开始讲解Eclipse的使用了。netbeans和eclipse都使用过,eclipse感觉用起来有些卡,以前用MyEclipse写web应用 程序,每次request.getParameter()方法时,都会卡住,等好久才恢复。Eclipse的支持很多,和很多开发工具集成起来,现在感觉 一个集成开发环境的功能太强大了,不只是以前的仅仅编译,调试,运行,而是一个真正的整合平台,比如代码提示,项目构建工具的集成,单元测试工具,版本控 制工具,数据库访问支持,性能调优,逆向工程,UML建模辅助等。很多东西都是拖拖控件就可以整出个界面,显著提高了开发效率。现在做eclipse的插 件开发的人也很多哈。不断地加入新的支持导致IDE越来越强大。netbeans出来的晚了些,不然风头应该会盖过eclipse。可惜sun公司一开始 没重视这一块,让IBM风光了一把。但我目前还是用Eclipse比较多,是习惯问题,netBeans有时很多功能找不到,就懒得用了。

提到了Borland公司,听到这个名字很是如雷贯耳哈。该公司开发出了很多流行的集成开发工具,如
编写c语言调试的Tubor C,还有JBuilder,不过因为诸多原因,现在早已分光不再,已经成为一个传奇。
由此可见,IT行业的新旧交替是非常快的,没有一个公司敢裹足不前,靠吃老本过日子。只有不断的自我创新,有所突破,向竞争对手学习,抢占先机,吸引用户群才是王道。

分享到:
评论

相关推荐

    java异或-Java异或运算总结.pdf

    - **交换两个变量的值**:无需引入额外的变量,可以通过异或操作实现两个整数变量a和b的值互换,`a = a ^ b; b = a ^ b; a = a ^ b;` - **快速判断奇偶性**:通过计算一个整数与1的异或结果,可以确定该数是否为偶数...

    十六进制字符串按位异或运算工具和java位异或运算

    异或运算(XOR)是计算机逻辑运算的一种,它具有对称性和自反性,广泛应用于加密、错误检测和数据比较等领域。本节将详细介绍十六进制字符串的按位异或运算以及如何在Java中实现这一运算。 十六进制字符串是由0到9...

    不要采用异或来交换两个变量

    传统的变量交换方法通常采用一个临时变量来进行值的存储与传递。例如: 1. **定义临时变量**:`int temp;` 2. **保存原始值**:`temp = a;` 3. **交换值**:`a = b;` 4. **恢复值**:`b = temp;` #### 异或交换法...

    Java异或 加密 和 解密方法

    Java异或加密是一种常见的对称加密技术,它基于异或(XOR)运算的特性来实现数据的加密和解密。异或加密简单易懂,且效率较高,常用于临时的安全需求或者作为更复杂加密算法的基础。 异或(XOR)运算在计算机科学中是一...

    用异或来交换两个变量能提高速度是错误的

    其中一个经常被提及的例子就是利用异或运算来交换两个变量的值。这种方法在某些情况下可能会导致代码难以理解和维护,并且在性能方面并不一定具有优势。本文将深入探讨这一主题,包括为什么这种方法在现代计算环境中...

    java异或运算操作简单

    例如,给定的代码片段展示了如何使用异或来交换两个整数`a`和`b`的值: ```java int a = 2; // a的二进制是10 int b = 3; // b的二进制是11 // 使用异或进行两数交换 a = a ^ b; // a现在是11,因为10^11=01 b = a...

    易语言位异或交换数值

    这段代码定义了两个整数变量A和B,通过三次位异或操作实现了它们之间的值交换,最后输出交换后的结果。这种位操作在易语言中提供了高效的编程解决方案,对于理解和掌握位操作及变量交换有重要的学习价值。

    Java异或运算(简单的加密,解密)

    因此,可以这样交换两个变量`a`和`b`的值: ```java a = a ^ b; // 现在 a 是两者的异或 b = a ^ b; // 现在 b 是 a 和原来 b 的异或,也就是原来的 a a = a ^ b; // 此时 a 变回了原来的 b,而 b 是原来的 a ``` ...

    按位异或校验和计算器.rar_异或_异或在线计算_异或在线运算_按位异或_校验和计算器

    这个“按位异或校验和计算器”可能是一个软件程序,能够接受一系列输入值,对这些值进行逐位异或操作,生成一个校验和。校验和常用于检测数据传输或存储中的错误,因为任何数据位的改变都会导致最终异或结果的改变。...

    易语言位异或交换数值源码

    假设我们有两个变量A和B,我们想在不借助第三个变量的情况下交换它们的值,可以这样实现: ```易语言 .整数型 A = 5 // 假设 A 的初始值为 5 .整数型 B = 10 // 假设 B 的初始值为 10 A = A ^ B // 进行第一次位...

    DES与MAC算法工具V0.4-DES-MAC-异或-XOR-银行

    DES与MAC算法工具V0.4 用于各大银行的算法工具。 1、DES加解密:DES单倍长、双倍长、3倍长 2、MAC报文算法:ANSI-X9.9-MAC, PBOC-...3、异或XOR运算:8bytes, 16bytes 用于程序调试或结果运算、加密、解密过程运算。

    求异或值的软件

    在IT领域,"异或值计算"是一种常见的数据处理技术,尤其在计算机科学、编码理论以及信息安全中占有重要地位。异或(XOR)运算符是逻辑运算的一种,它的基本概念是:当两个输入位相同时,结果为0;当两个输入位不同时...

    BAT批处理脚本-加密解密-交换两个变量的值而不使用临时变量.zip

    - 上述代码中,a和b的值通过异或实现了交换,而没有引入新的临时变量。 4. **加密与解密**: - 在批处理脚本中实现加密解密可能涉及到一些加密算法,如简单的位移、异或或其他更复杂的加密库。由于批处理脚本的...

    Java异或.docx

    3. **值的交换**:利用异或运算,可以不借助额外的变量交换两个数的值。例如: ```java a = a ^ b; b = a ^ b; a = a ^ b; ``` 在这个序列之后,a和b的值会互换,而没有使用第三个变量。 4. **奇偶性检测**...

    神经网络-异或的权值优化

    异或(XOR)逻辑运算符是计算机科学中的基础操作,它返回两个输入位不同的结果。对于传统逻辑门电路,设计一个单一的门来处理异或是相对简单的,但在神经网络中,由于其非线性特性,解决异或问题需要一定的策略。...

    Java基础模拟题-答案.docx

    在Java编程中,有许多基础概念和关键知识点,这些在题目中都有所涉及。让我们逐一解析: 1. **垃圾回收**:Java的垃圾回收机制会在对象不再被任何引用访问时回收内存。这意味着当对象变成不可达状态时,垃圾收集器...

    CRC计算器、和、异或、异或取反校验

    CRC计算器是实现这一校验过程的工具,它可以对数据进行和、异或、异或取反等不同的校验操作。 在通信和存储系统中,CRC校验是至关重要的,因为它能有效地检测出数据在传输过程中可能出现的单个比特错误或多比特错误...

    Java异或的详细说明

    总的来说,Java中的异或运算提供了强大的位级操作能力,不仅能够实现变量的无额外空间交换,还在查找数组中的特定元素、数据校验等方面发挥着重要作用。理解和熟练运用这些特性,可以显著提升我们的编程技巧和问题...

    java异或介绍及使用

    Java中的异或操作是二进制级别的运算,它在编程中有着广泛的应用。异或(XOR)运算符 `^` 可以用于处理不同类型的整数,包括字节(byte)、短整型(short)、整型(int)和长整型(long)。基本的异或规则是:两个...

    Java基础精品课02-变量和运算符.zip

    在Java编程语言中,变量和运算符是构建程序的基础元素,它们构成了代码的基本逻辑和数据存储。本课程“Java基础精品课02-变量和运算符”深入讲解了这两个核心概念,旨在帮助初学者理解并熟练掌握它们。 首先,变量...

Global site tag (gtag.js) - Google Analytics