烧脑的算数(交换2个变量值)
来源:互联网 发布:windows loader好用吗 编辑:程序博客网 时间:2024/05/17 02:34
Topic: 不使用第三个变量, 交换2个变量的值。
方法一: 使用加减法实现, 缺点很明显,即加法操作可能导致数字越界。
int a=1;int b=2;a = b - a; //间距差值b = b - a; //原值减掉差值,就是共同部分的aa = a + b; //共同部分加上差异部分就是b
原理: 将2个值视为一条线上的2个点, 值都是相对于原点; 计算出2个点的间距以及共同部分。
方法二: 位运算, 原理是数字与任意数字连续异或2次仍然等于原值(类似于负负为正),说白了就是同一个数异或2次相当于啥都没变。优点:不会数字越界。
var a = 10var b = 20a = a^bb = a^b //等同于 b = a^b ^b , 而 a^b ^b = aa = a^b //等同于 a = a^b ^ a , 而 a^b^a = b
判断一个数字是2的整数次幂? 说人话就是2、4、8、16、32、64等等。 特点是只有第一个bit是1,其它bit都是0。
实现原理: 整数次幂减1后只有第一个bit是0, 其它bit都是1; 二者逻辑与肯定等于0.
//判断一个数是2的整数次幂//原理:在二进制中,乘以2相当于左移一位,所以2的整数次幂,相当于左移了n位,表示为100..00,而减一后,即为011..11,它们的与结果等于0.func isPowerOfTwo(_ value: Int) -> Bool { return (value & (value-1)) == 0}
上面是Java语言的写法, 那么Swift语言如何实现呢? 当然也可以按照上面的2种算法实现, 但下面要介绍的是Swift独有的语法:
1、使用系统API swap函数
2、使用tuple元组方式, 这是Swift4的新特性。
var a = 1var b = 2(b, a) = (a, b)print("\(a)-\(b)") //2-1
元组还支持交换3个或更多的变量,这个特性很屌~~~
var a = 1var b = 2var c = 3(c, b, a) = (a, b, c)print(a,b,c) //3 2 1
阅读全文
0 0
- 烧脑的算数(交换2个变量值)
- 交换2个变量值的最少内存算法.
- 交换2个变量值的实现方法
- 第八个Java程序,实现变量值的交换。
- 交换变量值的方法
- 变量值的交换方法总结
- 变量值的交换方法总结
- 变量值的交换方法总结
- 3种交换变量值的方法
- 两个变量值的交换legend
- 交换两个变量值引发的感想
- 两种交换变量值的方法
- 交换两个变量值的方法
- 交换变量值的三种方法
- 两个变量值的交换方法
- 交换两个变量值的方法
- 交换两个变量值的常用方法
- 变量值交换
- 机器学习(二)梯度下降
- zoo.cfg配置文件参数详解
- 运维架构服务监控Open-Falcon
- CSS网页全屏
- Eclipse设置相同变量背景色高亮显示
- 烧脑的算数(交换2个变量值)
- c++是否格式化
- js中获得当前时间是年份和月份
- 网络通信InetAddress、URL
- JRE与JDK的区别
- 解决idea控制台打印乱码问题
- 链式前向星
- thinkphp oracle 数据库插入数据
- Retrofit的动态代理