我試圖檢查LSB的第二位是否被設置。 我使用下面的函數來做到這一點。 如果是第一位,我可以簡單地返回(uintptr_t) p & 1
。 由於我正在檢查是否設置了第二位,我正在執行另一個操作==
。 有沒有一種巧妙的方法可以用一條指令來實現呢?檢查是否設置了一個特定位
static inline bool is2ndBitSet(void* p)
{
return ((uintptr_t) p & 2) == 2;
}
編輯: 我只是想在評論中提出的建議,是的,我做的冗餘比較
#include<stdio.h>
#include<stdint.h>
static inline bool is2ndBitSet(void* p)
{
return ((uintptr_t) p & 2);
}
int main()
{
unsigned long* ptr = (unsigned long*) 0x4;
unsigned long* ptr1 = (unsigned long*) 0x3;
if(is2ndBitSet(ptr))
{
printf("bit is set\n");
}
else
{
printf("bit is not set\n");
}
if(is2ndBitSet(ptr1))
{
printf("bit is set\n");
}
else
{
printf("bit is not set\n");
}
return 0;
}
輸出
bit is not set
bit is set
'p&2'?我錯過了什麼? – Kevin
返回'int'並且具有零均值假,並且非零均值truth-y。那麼'p&2'完全有效。 – Kevin
'p&2'將返回'2'而不是'1'。我可以返回int,但我想保持簡單,因此'bool'。 – arunmoezhi