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