- 编译器会优化?
- cpu 看来最终耗时是等价的?
我知道有些算法会避免使用乘法,除法,尽量采取无脑移位,例如二进制扩展欧几里得算法。但是这是针对大数的
默认的 Int64 这样有用吗
我知道有些算法会避免使用乘法,除法,尽量采取无脑移位,例如二进制扩展欧几里得算法。但是这是针对大数的
默认的 Int64 这样有用吗
|
NazzApr 19, 2023
1
有没有必要得看你做什么, 业务层没必要
|
|
ysc3839Apr 19, 2023 via Android
2
没有必要,会优化,除非编译时只能使用 Debug 模式
|
|
xtreme1Apr 19, 2023
3
unsigned 才是
|
|
HurrianceApr 19, 2023
4
取决你的需求。
除非你有很明确性能方面的要求,并且后者的优化确确实实给应用带来影响,那自然可以采取。 在我很有限的经历里,代码的可读性,在一个项目的足够长的周期里,反而是价值最大的。 |
|
PythonYXYApr 19, 2023
5
除了优点炫技的感觉,工作中这样写完全没有必要
|
|
needppApr 19, 2023
6
方便给人读的代码才是好代码; 运行效率那是编译器干的事
|
|
wu67Apr 19, 2023
7
容易读懂, 一眼筛过去不需要动脑子, 才是最重要的. debug 的时候, 表达式越反人类直觉, 耗时就越长...
我现在前端项目里面一堆以前人留下来的坑, 各种隐式转换和用+号转字符串为数字, 看着脑壳疼 |
|
csskApr 19, 2023
8
PC 没必要,MCU 看情况
|
|
KousukeSakurakoApr 19, 2023
9
为何不写成 `x & 255 // equivalent to 'x % 256'` 可读性和那可能有可能没有的性能优化都有了。 当然前提是真的等价, 你还可以继续注释 `assert x > 0`。
根据我个人几年算法竞赛的经验, 这种性能优化是有意义的, 不过很少有那种场景就是了 |
|
apakeApr 19, 2023
10
没必要, 可读性更重要. 节省人的时间更重要
|
|
bruce0Apr 19, 2023
11
以前在 V 站看到过一句话 "可读性>性能>编译时间"
|
|
12
我应该会写成 x & 0xff ,
这不是典型的取最低字节的写法吗,我没有在其他操作遇到过需要%256 的情况, |
|
seersApr 19, 2023
13
会被同事打死
|
|
leonshawApr 19, 2023 via Android
14
要是无符号类型
|
|
agagegaApr 19, 2023 via iPhone
15
浮点数可以手工优化一下,因为浮点数限制很多,编译器没有额外选项的情况下一些优化没法做。整数操作编译器能优化到你完全认不出。
我的建议是,如果你的逻辑真的是取模那就用%,如果是 BitMask 这样的操作就用&,按它本来的语义来。 |
|
secondwtqApr 19, 2023
16
对于这个 case 来说,现代 C/C++/Fortran 编译器对于整数的 div/mod 操作,当除数是整数时是可以直接优化掉的
https://godbolt.org/z/Eo8T56hn5 |
|
myqooApr 19, 2023
17
js 里有必要
|
|
oldshensheepApr 19, 2023
18
有可能不用:
int a(unsigned n) { return n % 256; } int b(int n) { return n & 255; } 函数 a 和 b 是等价的,汇编代码完全相同 https://godbolt.org/z/Mod7GGPKj |
|
19
> 默认的 Int64 这样有用吗
会有,因为这两个表达式在 x<0 的时候不等价,编译器不能动手脚 但是 uint 带优化的话编译出来是一样的 |
|
yolee599Apr 20, 2023
20
可以这么写,要可读性加注释不就行了,说明等价于什么,使用条件是什么
|