逐位检查标志是否存在 [英] bitwise check if flag present

查看:24
本文介绍了逐位检查标志是否存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有通常用于检查int/其他数据类型中是否存在标志的方法?我想出了这样的结果:

if ((host&flagtocheckfor)==flagtocheckfor)

哪种方法可以很好地工作-但是,它是设置标志的常用方法,这是通常检查标志的方式吗?还是有更简明的方法?

推荐答案

这与在大多数支持位标志的语言中检查位标志的方式完全相同。

例如:

#define BIT_7 0x80
#define BITS_0_AND_1 0x03

if ((flag & BIT_7) == BIT_7) ...
if ((flag & BITS_0_AND_1) == BITS_0_AND_1) ...

而您可以使用以下命令检查类似于第一个的内容:

if ((flag & BIT_7) != 0) ...

这对于第二个实际上不起作用,因为如果设置了其中一个位,而不是两个位,则它将返回TRUE。

出于完整性考虑,C允许您使用以下命令设置位掩码:

flag = flag | BIT_7;   // or you can also use 'flag |= BIT_7'

您可以使用以下命令清除它们:

flag = flag & (~BIT_7);

并使用以下命令切换它们:

flag = flag ^ BIT_7;

这篇关于逐位检查标志是否存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆