2B程序员2在哪里了?

2013-06-30 17:19:42 +08:00
 twor2
5737 次点击
所在节点    程序员
50 条回复
ls2110609
2013-06-30 19:37:32 +08:00
@davepkxxx 你试一试 会惊奇的发现这同样是换值 用了位运算 但是有局限性 比如 0
jjplay
2013-06-30 19:49:21 +08:00
给你贴个我之前公司的程序员弄得js代码

$(document).ready(function() {
$("#example1-1").imgbox();
});
$(document).ready(function() {
$("#example1-2").imgbox();
});
$(document).ready(function() {
$("#example1-3").imgbox();
});
$(document).ready(function() {
$("#example1-4").imgbox();
});
$(document).ready(function() {
$("#example1-5").imgbox();
});
$(document).ready(function() {
$("#example1-6").imgbox();
});
)};

----------------------------------------------
为毛他就是想不到 for循环
Golevka
2013-06-30 19:51:00 +08:00
@alexrezit 文艺方法是错的, 当a和b引用同一个变量时a和b都会变成0
txx
2013-06-30 20:00:56 +08:00
文艺程序员这个 曾经还有一句话版本的....同样也有bug的....
一般这么写都是用于 acm 大神装逼
而不是用在工程开发上
fangzhzh
2013-06-30 20:05:40 +08:00
@davepkxxx 第一个传值 第二个传引用 传地址是另外的 用*的
treo
2013-06-30 20:28:59 +08:00
swap的标准做法不是xor吗
alexrezit
2013-06-30 20:33:10 +08:00
@qiukun
@Golevka
呃... 我是说类似的意思是避免使用 temp var.
yuanz
2013-06-30 20:56:48 +08:00
@msg7086 thx! 不懂C++,还以为是C语言的,于是以为是错了...汗.
yuanz
2013-06-30 20:58:09 +08:00
@swulling 谢~
luikore
2013-06-30 21:43:51 +08:00
@alexrezit 那对速度也没影响... 编译器基本都有个优化阶段是把代码变成 SSA 形式, SSA 形式所有 var 都只赋值一遍, 或者说就是一大堆 tmp var... 单赋值的代码上面可以做各种优化, 所以 LLVM 的中间语言就是用 SSA 的

http://en.wikipedia.org/wiki/Static_single_assignment_form
celon
2013-06-30 21:52:07 +08:00
使用第二种方法,才是二逼程序员吧?!
我本身参与维护的一个老旧开源项目,里面这种类似写法数不胜数。
celon
2013-06-30 21:53:03 +08:00
补充:
我的意思是:写出不能让人一下子看明白的代码,本身是一种二逼行为。
luikore
2013-06-30 21:56:04 +08:00
@alexrezit

SSA 在分配寄存器阶段才做消除的
如果你脑内分配的结果比寄存器分配算法出来的快, 也可以用 asm ("RIP") 之类的去强制指定变量对应的寄存器, 但是不用内联汇编的话, 就算给变量加 register 关键字, 用不用 temp var 也对结果速度几乎没影响.

C++ 里是有复制构造函数的坑, 但是把重量级类型的 temp var 声明成引用类型就没事了.
luikore
2013-06-30 22:09:56 +08:00
现代 C 编译器已经打败了上个世纪的各种 2B 优化方式, KISS 的代码往往就是最高效的代码

再举个例子... 如 strcmp 的实现, 网上有大量的陈年博客写是如何强制转换成多字节类型来提速的, 但现在的情况是写成最笨的一个个字节比较的方式反而可能更快. 因为编译器可以做 loop unroll 然后根据 CPU 的 flag 选择 AVX2 / AVX / SIMD2 / SIMD1 指令去搞, 比手工优化来得安全, 而且自动选择了最佳匹配的指令, 速度和跨平台都能兼顾.
Mutoo
2013-06-30 23:18:39 +08:00
哈哈哈哈
davepkxxx
2013-07-01 01:19:32 +08:00
@fangzhzh 谢谢指正,我太久没碰c了……
Hyperion
2013-07-01 01:26:33 +08:00
@jjplay for也不大好, 不多的话写一起不就好了...
so898
2013-07-01 01:27:20 +08:00
写Objective-C和Java写多了之后,竟然觉得最后一个最顺眼……
我就这样『被2B』了么……
XDA
2013-07-01 09:39:22 +08:00
void swap(int x, int y)
{
x = x + y;
y = x - y;
x = x - y;
}
————————————————————————————
这个写法是不是也很2B?
Fedor
2013-07-01 10:57:51 +08:00
@jjplay 为毛他不看jq手册

$('#a, #b').lightbox();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/74234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX