if语句中的按位运算符

超本能梅西

我不确定如何使用按位运算符设置if语句,我可以使用条件运算符对它进行工作并总结枚举,但是我想知道如何使用&或|来实现。

 #define _CRT_SECURE_NO_WARNINGS
 #include <stdio.h>
 
typedef enum eUser_Permissions
{
VIEW =1,
ADD=2,
EDIT=4,
DELETE=8
} User_Permissions;

void print_permissions(char* username, int permissions);

int main(void){
int x = VIEW;
int j = VIEW | ADD | EDIT;
int s = VIEW | ADD | EDIT | DELETE;
print_permissions("S", s);
print_permissions("X", x);
print_permissions("J", j);

return 0;
}


 void print_permissions(char* username, int permissions)
{

if (permissions ==15)
{
    printf("%s's permissions (%d): VIEW ADD EDIT DELETE", username, permissions);
    printf("\n");
}
if (permissions ==1)
    {
    printf("%s's permissions (%d): VIEW", username, permissions);
    printf("\n");
    }
if (permissions == 7)
{
    printf("%s's permissions (%d): VIEW ADD EDIT", username, permissions);
    printf("\n");
}
dbush

您最初是使用按位OR运算符设置权限的,因此只需在检查时执行以下操作:

if (permissions == (VIEW | ADD | EDIT | DELETE))

如果要单独检查每个条件,请在传入的值和相关权限之间使用按位与:

printf("%s's permissions (%d):", username, permissions);
if (permissions & VIEW) {
    printf(" VIEW");
}
if (permissions & ADD ) {
    printf(" ADD");
}
if (permissions & EDIT ) {
    printf(" EDIT");
}
if (permissions & DELETE) {
    printf(" DELETE");
}
printf("\n");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章