dej*_*jay 4 c math integer numbers modulus
以下列方式很容易在0和1之间"切换":
int i = 0;
i = (++i) % 2; // i = 1
i = (++i) % 2; // i = 0
Run Code Online (Sandbox Code Playgroud)
同样,我发现可以在3到5之间"切换":
int i = 3;
i = (((i * 2) - 1) % 3) + 3; // i = 5
i = (((i * 2) - 1) % 3) + 3; // i = 3
Run Code Online (Sandbox Code Playgroud)
虽然这感觉很麻烦,但我正在寻找一种更简洁的方法来做到这一点.可以简化吗?如果是这样,怎么样?顺便说一下,我实际上是在用这个东西.
Chr*_*ung 12
矮得多:
int i = 3;
i = 8 - i;
i = 8 - i;
Run Code Online (Sandbox Code Playgroud)
当然,对于你的0/1切换,你应该这样做:
int i = 0;
i = 1 - i;
i = 1 - i;
Run Code Online (Sandbox Code Playgroud)
通常,对于a/ btoggle,执行以下操作:
int i = a;
i = (a + b) - i;
i = (a + b) - i;
Run Code Online (Sandbox Code Playgroud)
这是如何运作的?嗯,a + b - a是b,a + b - b是的a.:-D
另一种方法是使用XOR,因为a ^ (a ^ b) == b和b ^ (a ^ b) == a:
int i = 3;
i ^= 3 ^ 5; // i == 5
i ^= 3 ^ 5; // i == 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |