博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sweet Snippet 之 Bounce Setting
阅读量:4223 次
发布时间:2019-05-26

本文共 946 字,大约阅读时间需要 3 分钟。

1. 题记

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

  2. 问题

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

if (boolFlag) {    boolFlag = false;}else {    boolFlag = true;}

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

boolFlag = !boolFlag;

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

value = 1 - value;

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

3. 道理

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

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

(1) f(A) = aB + b

(2) f(B) = aA + b

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

  f(x) = A + B - x

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

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

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

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

转载地址:http://jizqi.baihongyu.com/

你可能感兴趣的文章
QNX简介
查看>>
MQTT协议基本介绍
查看>>
进程和线程是操作系统基本概念,了解一下
查看>>
SSL与TLS的区别以及介绍
查看>>
HTTPS、TLS、SSL、HTTP区别和关系
查看>>
Kafka 入门三问
查看>>
c/c++ 内存泄漏检测,开源工具valgrind使用整理
查看>>
h264 sps pps详解
查看>>
AAC的ADTS头信息介绍
查看>>
Coroutine,你究竟干了什么?
查看>>
代码宏的一点小知识
查看>>
Sweet Snippet系列 之 随机选择
查看>>
名人•牛人•我们这些普通人
查看>>
小话游戏脚本(一)
查看>>
使用VS2010在项目中编写C++头文现出"PCH 警告:标头停止点不能位于宏或#if块中"
查看>>
统计源期刊
查看>>
多线程解码并保存为yuv
查看>>
使用信号量控制线程执行顺序,进而控制不同视频流的解码顺序
查看>>
解码单个视频及保存yuv数据到文件中
查看>>
为什么基类中的析构函数要声明为虚析构函数?
查看>>