前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sweet Snippet 之 Bounce Setting

Sweet Snippet 之 Bounce Setting

作者头像
用户2615200
发布2018-08-02 17:14:21
2800
发布2018-08-02 17:14:21
举报

1. 题记

  又是一篇Sweet Snippet,自己看来都觉得过小,不足以成篇,不过自觉有些趣味,也就随便记一记了,权当自娱自乐 :)

  2. 问题

  程序中有时会用到所谓Bounce Setting这种技巧,目的是为了解决一些变量的“来回”设置问题,譬如一个布尔变量,最直观的Bounce Setting方法大概是这个样子:

代码语言:javascript
复制
if (boolFlag) {
    boolFlag = false;
}
else {
    boolFlag = true;
}

  以上代码虽说直观,但是仍然存在不少问题:譬如效率不高,分支判断代价高昂,再如代码表述略显累赘,不够简洁等等。一种更好的表达方式大概是这个样子:

代码语言:javascript
复制
boolFlag = !boolFlag;

  这种表达个人觉得非常聪明,很早之前自己便默默的记于心头了,每当遇到类似代码,总会不自觉的想起这个简洁美观的表达方式,近日在这里也看到了类似的代码,不过其中使用了整形变量1和0,相关的代码大概是这个样子:

代码语言:javascript
复制
value = 1 - value;

  看到之后突然觉得自己以前一直囿于布尔变量取非这么一种Bounce Setting的形式,而实际上,像上述的这种表达方法也是不错的思路,那么对于任意整数A、B,是否总是存在类似的这种表达式来优雅的完成Bounce Setting呢?不知你目前对此有什么想法,反正这个问题一开始是把我懵住了,但实际上,答案要比我想象的简单得多 :)

3. 道理

  假设表达式为一元一次多项式,不妨记为 f(x) = ax + b

  那么其应该满足的条件其实就是:

(1) f(A) = aB + b

(2) f(B) = aA + b

  经过一番高斯消去求解,我们得到 a = -1,b = A + B,于是有:

  f(x) = A + B - x

  嘿嘿,不知你看到这个表达式有什么想法,反正我是觉得挺好笑的,本来以为会是一个稍有繁复的公式,不想却是一个简单的能够一眼望穿的家伙,而自己一开始竟然也毫无察觉,着实好笑 :)

  废话打住,依据上述公式,任意整数间的Bounce Setting 方法直接套用即可,譬如说 A = 1、B = 0 那么自然有:

  f(x) = 1 + 0 - x = 1 - x

  OK,扯淡结束,就这么点东西了 :)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年01月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档