我试图检查LSB的第2位是否已设置。
我使用以下函数来执行此操作。
如果是第1位,我可以简单地返回(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
答案 0 :(得分:0)
答案 1 :(得分:0)
0代表 FALSE 其他任何代表 TRUE
只做if (p & 2)
或if (p & 0x2)
应该没问题。
P.S
我只是使用十六进制值键入相同的内容导致从0到F的十六进制值用于表示半字节中的设置/未设置位(连续4位)如果您正在执行操作,它会使事情更容易理解操作很多。