a%2 和 a&1 哪个更快?

Far*_*oui 0 c c++

我知道的原理a&1:例如:

4&1: 0100
     0001
   = 0000
Run Code Online (Sandbox Code Playgroud)

5&1: 0101
     0001
   = 0001
Run Code Online (Sandbox Code Playgroud)

但我想知道原理是什么以及如何a%2

哪个更快,a%2或者a&1

P__*_*J__ 5

有两种情况:

  1. 无符号整数。任何现代编译器即使没有优化也可以x % 2编译x & 1。因此速度将相同,因为两者将具有相同的机器代码。
  2. 有符号整数 - 的结果x % 2和 的结果x & 1完全不同,在这种情况下,您应该使用x % 2取模并x & 1测试 LSB。https://godbolt.org/z/cEY4dM

  • @rusty 这正在变得 OT,但某些操作取决于所有“x”的“x/3 - 1 == (x - 3) / 3”。c 整数除法的情况并非如此,它四舍五入为零而不是负无穷大。如果整数除法向负无穷大舍入,则“-5 / 3 == -2”和相应的模运算符将产生“-5 % 3 == 1” (2认同)