我偶然发现了这个粘贴:
int main() {
return!!!~!!!!!~!!!1??!??!1?
"^_^" <:3
]: "^.-"
<: 0.0
<3 :> ;}
一组可爱的表情符号,据称返回 null。有谁的 C-fu 比我更好的解释它是如何工作的吗?
<:手段[,:>手段](它们是有向图)。
??!意思是|(它是一个三元组),所以??!??!是合乎逻辑的||
?第一行的最后一个是条件运算符。
其余的从两个表情符号字符串之一中选择一个字符。它将从第一个中选择,因为无论有多少!,~一开始就乱七八糟,anything || 1都是真的。
所以它实际上选择"^_^"[3]了 ,它是字符串末尾的 nul 终止符,即 0。
基本上代码读取return ((some mess) || 1) ? "^_^"[3] : "^.-"[1];,因为0.0 < 3是真的。
[编辑:我刚刚意识到(并在下面评论),可以编写一个~(expression equal to 0)具有未定义行为的符合实现。所以要知道这段代码是否严格符合,你必须检查两者都没有~应用于零。事实上!!!1是0,所以代码并不严格符合。不过,它适用于您可以命名的任何实现,因为几乎所有内容都使用 2 的补码。]
首先,用它们的规范形式替换三元组和替代标记:??!become |、<:become[和:>become ]:
!!!~!!!!!~!!!1 || 1 ? "^_^"[3] : "^.-"[0.0<3]
第一部分<something> || 1评估为真。如果您愿意,您可以计算出!!!~!!!!!~!!!1评估结果,但这并不重要(只要定义了行为,如评论中所述)。所以条件运算符的结果是第一个分支,
"_^_"[3]
字符串文字有四个字符,最后一个是零终止符;所以整个表达式的值为零。
通过删除三元组和二元组(连同空格,并在三元运算符上添加括号),我们得到:
int main() { return !!!~!!!!!~!!!1||1?("^_^" [3]):"^.-"[0.0 <3]; }
现在我们需要做的就是删除不必要的额外内容......