我正在读取内核代码,在一个地方我看到了if
语句中的一个表达式,如下所示
if (value == (SPINLOCK_SHARED | 1) - 1) {
............
}
其中SPINLOCK_SHARED = 0x80000000
是预定义的常量.
我想知道为什么我们需要(SPINLOCK_SHARED | 1) - 1
来进行类型转换?表达式的结果将是80000000--与0x80000000相同,不是吗?然而,为什么"或1"和"减1"很重要呢?
我有一种感觉,好像我错过了什么..