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

两个 int 类型变量 互换数值 (无第三变量)

    博客分类:
  • Java
阅读更多

	/**  同时交换(很巧妙的算法)*/
	public static void main(String[] args) {
		int a = 5;
		int b = 4;
		b = a + 0 * (a = b);
		System.out.println(a + ":" + b);
	}


	/** 亦或 --类似2进制-- (最快的算法)*/
	public static void main(String[] args) {
		int a = 5;
		int b = 4;
		a = a ^ b;
		b = b ^ a;
		a = a ^ b;
		System.out.println(a + ":" + b);
	}


	/**  数值相加减交换法*/
	public static void main(String[] args) {
		int a = 5;
		int b = 4;
		a = a + b;
		b = a - b;
		a = a - b;
		System.out.println(a + ":" + b);
	}


	/** 数值相乘除交换法(不推荐)除数为0时会抛出异常*/
	public static void main(String[] args) {
		int a = 5;
		int b = 4;
		if (a != 0)// 注意:此处a为除数
		{
			a = a * b;
			b = a / b;
			a = a / b;
		} else {
			a = b;
			b = 0;
		}
		System.out.println(a + ":" + b);
	}

//有更妙的算法一起交流
1
0
分享到:
评论
2 楼 明子健 2013-11-08  
低下头是人间 写道
第三种和第四种都面临着超出Integer最大值的问题
第二种应该算是标准写法了

第一种看起来的确很妙。但是是否会依赖于编译器的实现?(无责任乱喷)



首先欢迎你的评论,第一种就是简单四则运算的逻辑,对编译器的要求?就是一个赋值先后问题。同时表示个人对编译器的了解不深,不吝赐教,谢谢!
1 楼 低下头是人间 2013-10-13  
第三种和第四种都面临着超出Integer最大值的问题
第二种应该算是标准写法了

第一种看起来的确很妙。但是是否会依赖于编译器的实现?(无责任乱喷)

相关推荐

    C#不借助第三个变量实现两整数交换

    c#中实现两个int变量的数值互换,在借助第三个变量做临时载体的情况下,非常简单。  int a = 10;  int b = 5;  int c ;  c = a;  a = b;  b = c;  如果不借助第三方变量,有几种实现的方法:  1....

    第8章-善于利用指针.pptx

    `定义了两个指向`int`类型的指针变量`p1`和`p2`。 #### 指针的应用示例 1. **通过指针变量访问整型变量**:下面的示例展示了如何定义和使用指针变量来访问整型变量。 ```c #include int main() { int a = ...

    数据类型运算符和表达式C语言程序设计第三电子PPT学习教案.pptx

    标识符是大小写敏感的,比如`Name`和`name`是两个不同的标识符。为提高代码可读性,应避免使用系统关键字作为标识符,并遵循有意义的命名规则。 5. **关键字**:关键字是C语言预定义的保留字,如`int`、`float`、`...

    C语言设计谭浩强第三版的课后习题答案

    计算两个给定的算术表达式的值。 **解答:** 1. 对于第一个表达式,根据题目给定的值,我们可以得到:`x + a % 3 * (int)(x + y) % 2 / 4 = 2.5`。 2. 对于第二个表达式,根据题目给定的值,我们可以得到:`(float)...

    C++重要知识点总结

    实现两个变量的数值互换需要使用中间变量,例如 `t = x; x = y; y = t;`。 七、三位小数的保留 保留三位小数,第四位四舍五入的程序需要使用中间变量,例如 `x = (int) x` 把小数部分去掉。 八、选择结构 选择...

    JavaSE034Arrays类解析及数组疑难剖析.docx

    互换两个整数a和b的值通常有两种方法: - 第一种是使用临时变量temp,将a的值存储到temp中,然后将b的值赋给a,最后将temp的值赋给b。 ```java int a = 3; int b = 4; int temp = a; a = b; b = temp; ``` ...

    c语言简单学习资料(初学者可以看看)

    - 第3题中,涉及了不同数据类型的混合运算。在C语言中,`unsigned int`与`int`相加,结果可能会导致符号位的变化,这里的结果取决于具体的计算过程和平台。 4. **数组与字符串**: - 第4题展示了字符数组与字符串...

    C语言基本数据类型及运算题库

    ,因为这条语句将浮点型变量x的值保留到小数点后两位,并将第三位四舍五入。 3. 整型运算符 在C语言中,整型运算符是用于进行整数运算的运算符。例如,x = 10 % 3; 将数字10除以3,并将余数赋给变量x。题目3所示的...

    java经典技术

    一个中文汉字通常占两个字节,但在Java中char类型占据16位,所以可以存储。 8. **计算2乘以8**:最有效率的方式是直接使用`2 << 3`,这是位左移运算,相当于乘以2的3次方,即8。 9. **设计百亿计算器**:设计一个...

    程序设计基础习题

    - **(2)有两个瓶子X和Y,分别盛放可口可乐和非常可乐,小明想将它们互换(即X瓶原来盛可口可乐,现在改盛非常可乐;Y瓶正好相反)。** - **N-S图:** - 开始 - 设置一个临时瓶子temp - 将X中的内容倒入temp - 将Y...

    c试题、复习题一份

    10. **题目**: 假定`int`类型变量占用两个字节,其有定义:`int x[10]={0,2,4};`,则数组`x`在内存中所占字节数是____。 - **答案**: 20 - **解析**: 数组`x`共有10个元素,每个元素占用2个字节,因此总字节数为20...

    c代码-ab交换数值1

    在C语言编程中,交换两个变量的值是一个常见的操作,比如我们要交换两个整数a和b的值。在"ab交换数值1"这个主题中,我们主要关注的是如何使用C语言来实现这一功能。让我们深入探讨一下这个过程,以及可能涉及的一些...

    C语言FAQ 常见问题列表

    o 4.12 我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗? ((condition) ? a : b) = complicated_expression; * 5. 指针 o 5.1 我想声明一个指针并为它分配一些空间, 但却...

    C语言深度进阶篇-王桂林-

    - **多维数组**:多维数组是指两个或两个以上维度的数组。 - **本质分析**:多维数组在内存中依然是一维连续存储的。 - **形像描述**:多维数组可以形象地理解为表格或立方体等形式。 #### 指针 - **内存编址与...

Global site tag (gtag.js) - Google Analytics