对于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行业的新旧交替是非常快的,没有一个公司敢裹足不前,靠吃老本过日子。只有不断的自我创新,有所突破,向竞争对手学习,抢占先机,吸引用户群才是王道。
分享到:
相关推荐
例⼀:在不引⼊第三个变量的情况下,两个变量的值(整数) //交换a、b的值 例⼆:判断奇数偶数更简单更⾼效的做法 //这个实际考的不多, 太简单 //思路:奇数的⼆进制最低为⼀定为1,偶数的⼆进制最低位⼀定为0, a^...
北京动力节点-Java编程零基础教程-080-Java基本语法-运算符-逻辑运算符-异或操作与非操作.avi 北京动力节点-Java编程零基础教程-081-Java基本语法-运算符-条件运算符.avi 北京动力节点-Java编程零基础教程-082-...
不要采用异或来交换两个变量。
可进行十六进制字符串按位异或运算,就是输入十六进制数,每个十六进制数间输入空格,然后点输出即可得到结果
DES与MAC算法工具V0.4 用于各大银行的算法工具。 1、DES加解密:DES单倍长、双倍长、3倍长 2、MAC报文算法:ANSI-X9.9-MAC, PBOC-...3、异或XOR运算:8bytes, 16bytes 用于程序调试或结果运算、加密、解密过程运算。
(完整word版)单片机avr-c语言位运算-与或非-异或逻辑-运算介绍-详解.doc
易语言位异或交换数值源码,位异或交换数值
异或校验工具。十六进制异或值计算。。。。。。。。。。
C#412-异或加密数字,源程序,try { if (textBox2.Text != "") { textBox1.Text = (Convert.ToInt32(textBox2.Text) ^ 123).ToString(); } } catch { }
这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。 下图展示了3 ^ 5 和 4 ^^ 5的计算过程 输入 第一行有一个正整数T, 表示...
异或值软件
陈硕 (giantchen_AT_gmail)
求异或值的软件
在嵌入式开发中经常使用异或值作为校验,这就是一个方便的异或值计算工具
适合在校大学生初步实验使用,将此程序直接粘贴到Matlab的m文件中,便可直接运行,得到结果,本人已在博客中发表“与”运算实验,神经网络网址如...通过看我的博文,自己编出“异或”运算代码
线性神经网络-异或问题 人工神经网络 深度学习
Java异或 加密 和 解密方法,很经典的,绝对有所帮做。
java异或
java异或
CRC计算器工具,有和、异或、异或取反等校验方法计算,方便前期应用开发