【发布时间】:2021-03-11 19:07:58
【问题描述】:
有人能解释一下为什么使用NOT 运算符两次,如下例所示:
setBits += !!(n & mask); // if some bits match between n and mask, setBits = 1, else setBits = 0
这基本上可以在 C 语言中使用,并且在我这样重写后也可以使用:
setBits += if (n & mask) != 0 {1} else {0};
在 Rust 中不能按预期工作?截至目前,它返回 n 和掩码的值,而我想在字节码级别强制两次 NOT 并避免分支(cmp 指令)。
注意:我刚刚检查了汇编代码,显然 Rust 编译器优化了它...
但是!!value 不等同于value
有什么方法可以强制NOT x2 并避免CMP 指令?
【问题讨论】:
标签: rust