【发布时间】:2019-02-25 11:58:18
【问题描述】:
我有以下问题:我有两个 64 位变量,必须尽快比较它们,我的微控制器只有 32 位。
我的想法是有必要将64位变量分成两个32位变量,像这样
uint64_t var = 0xAAFFFFFFABCDELL;
hiPart = (uint32_t)((var & 0xFFFFFFFF00000000LL) >> 32);
loPart = (uint32_t)(var & 0xFFFFFFFFLL);
然后比较 hiParts 和 loParts,但我确信这种方法很慢并且有更好的解决方案
【问题讨论】:
-
我认为没有完全不同的概念可以做到这一点,因为如果它们相等,您仍然需要比较每一位。但是,您可以通过先比较高部分来改进比较。如果高部分不同,则低部分不再重要。
-
您的编译器允许按位与和移位 64 位值,但不允许
==或其他比较运算符? -
如果编译器支持
uint64_t,那么编译器可以比较uint64_t类型的两个变量。您只需if (var1 == var2) -
以防编译器无论如何都不会删除它,不需要在高位进行按位与。右移无符号值会清除高位。无论如何,投射到 32 位也会丢弃它们。