有没有一种通常用于检查 int/其他数据类型中是否存在标志的方法? 我想出了这样的代码:
if ((host&flagtocheckfor)==flagtocheckfor)
这样做很好- 但是设置标志的这种方法很常见,这是检查标志的通常方式吗?还是有更简洁的方法?
有没有一种通常用于检查 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) ...
对于第二种情况,那不会真正起作用,因为它将在两个位中任意一个被设置为1时返回true,而不是在这两个位都被设置为1时返回true。
为了完整起见,C允许您使用以下方式设置位掩码:
flag = flag | BIT_7; // or you can also use 'flag |= BIT_7'
您可以使用以下方法清除它们:
flag = flag & (~BIT_7);
并使用以下方法切换它们:
flag = flag ^ BIT_7;