三个卡常问题

学术版

第一个我看某个卡常文章说没区别,伪代码都是一样的,看个人风格。
by 王熙文 @ 2021-04-12 20:40:57


您可以自己写一个程序测试一下
by CodePenguin @ 2021-04-12 20:42:07


一般来说编译器比你聪明
by shenmadongdong @ 2021-04-12 20:43:20


1. 一样。 2. 一样。 3. 不能。
by ud2_ @ 2021-04-12 20:44:18


位运算不是基本都没用吗(
by Stinger @ 2021-04-12 20:52:02


关于一楼:可能是这篇 https://www.luogu.com.cn/blog/zhaojinxi/qian-tan-di-ceng-chang-shu-you-hua-ji-bian-yi-qi-you-hua 以及不是伪代码,是汇编代码
by zhy137036 @ 2021-04-12 20:53:34


懂了,谢谢各位大佬!
by _caiji_ @ 2021-04-12 21:00:22


补充: 1. 经测试 `x = x * 10 + (ch - 48)` 较快,被优化成 `x = (u64) &((u16*) ch)[(u64) &((u32*) x)[x] - 24]`(伪代码);至于 `x = (x << 3) + (x << 1) + (ch ^ 48)`,编译器根本看不懂。 2. 编译结果一样,都是 `neg x`。 3. 被优化成加减乘和位移。
by ud2_ @ 2021-04-12 21:02:31


孩子,小小年纪不要学卡常,更不要觉得自己比编译器逼格高
by 鏡音リン @ 2021-04-12 21:03:47


|