(点击
上方公众号
,可快速关注)
来自:伯乐小组
链接:http://group.jobbole.com/9907/
来自 Quora 的一个讨论帖,题主说了:
如果是单行代码,必须是那种实用的,不是混淆或令人费解的那种。比如:while (*n++=*i++) ; (← 看懂的童鞋可在评论中解释)
我想再找些更为复杂的程序。当然了,① 不是叫你发那种调用很多函数才能返回结果的;② 我想看单行代码几乎就完成所有工作的例子。
Hayri Uğur Koltuk 推荐了《毁灭战士 3》中用到的平方根倒数速算法的代码:
float
Q_rsqrt
(
float
number
)
{
long
i
;
float
x2
,
y
;
const
float
threehalfs
=
1.5F
;
x2
=
number
*
0.5F
;
y
=
number
;
i
= *
(
long
*
)
&
y
;
// evil floating point bit level hacking
i
=
0x5f3759df
-
(
i
>>
1
);
// what the fuck?
y
= *
(
float
*
)
&
i
;
y
=
y
*
(
threehalfs
-
(
x2
*
y
*
y
)
);
// 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
return
y
;
}
看第 8 行高亮的那句!0x5f3759df !
【2015-10-29 更新】
Pierre Raii 童鞋有一天在学校经过系主任办公室时,看到门上贴了一张纸,说 C 语言没那么难
void
(
*
(
*
f
[])())()
图上有英文解释,看懂的童鞋可翻译或解释一下。
Jefferson Steelflex 提醒说:
如果有人觉得这个声明很费解,去查查指针的右左规则(right-left rule)。
【2015-10-29 更新】
Eric Wadsworth 推荐的是:
我有位前同事是在 NASA 工作,做流体动力学模拟。他曾经遇到一个 Bug,团队追踪就花了整整三个礼拜。他给我展示了 C 代码,其中有一行类似这样的:
c
=
*
*
*
*
*
*
a
;
Stephan Froede 说自己也遇到过类似的
char
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
a;
记不清有多少 * ,并且还没有注释,他称之为来自地狱的代码,哈哈。
伯乐小组站内评论摘选
YuHao
一种快速的把double类型的整数转成int的神奇方法,应该算吧: http://stackoverflow.com/q/17035464/1009479 , 也有一个magic number: 6755399441055744.0 , 在Lua源码里见到的.
从 void (*(*f[])())() 看不出 f 是什么类型的,可收藏 http://cdecl.org/ ,你不会后悔的。(手动解析 规则是从右向左,从里到外,C++基本同理,语法比C更复杂)
Ace
照片中的行代码:void (*(*f[])())()
定义 f 是一个未指定大小的指针数组,数组中的指针指向 { 返回[ 指向(返回值为空的函数)的指针] 的函数}
是这个意思吧?
觉得本文有帮助?请分享给更多人
关注「算法爱好者」,修炼编程内功