If statement 作为比较工具的位组合

If statement 作为比较工具的位组合,if-statement,bit-manipulation,If Statement,Bit Manipulation,我正在编写一个带有打印标志的C++函数。我想使用此标志打印不同的邮件。我认为这个标志接受三个不同的二进制值,并根据其值打印不同的消息 flag == 000 printf "flag is 0" flag == 010 printf "flag is 1" flag == 100 printf "flag is 2" 如何比较此标志的值,以便获得以下输出: flag ==011 printf "flag is 0" printf "flag is

我正在编写一个带有打印标志的
C++
函数。我想使用此标志打印不同的邮件。我认为这个标志接受三个不同的二进制值,并根据其值打印不同的消息

flag == 000
    printf "flag is 0"

flag == 010
    printf "flag is 1"

flag == 100
    printf "flag is 2"
如何比较此标志的值,以便获得以下输出:

flag ==011 
    printf "flag is 0"
    printf "flag is 1"

flag ==101 
    printf "flag is 0"
    printf "flag is 2"

flag ==111 
    printf "flag is 0"
    printf "flag is 1"
    printf "flag is 2"

我知道我可以添加更多的
if blocks
来完成这项任务,这看起来并不专业。有没有人能帮我找到正确的方法,避免在blocks中写入不必要的

您可以循环并对
标志中的每个位执行按位and(
&
)。这意味着如果要检查更多位,不必添加更多的if/else块。e、 g:

#包括
int main(){
int标志=7;
int n=3;//将其更改为要检查的位数

对于(int i=0;i,您可以循环并对
标志中的每个位执行逐位and(
&
)。这意味着您不必添加更多的if/else块来检查更多位。例如:

#包括
int main(){
int标志=7;
int n=3;//将其更改为要检查的位数

对于(int i=0;i,您可以循环并对
标志中的每个位执行逐位and(
&
)。这意味着您不必添加更多的if/else块来检查更多位。例如:

#包括
int main(){
int标志=7;
int n=3;//将其更改为要检查的位数

对于(int i=0;i,您可以循环并对
标志中的每个位执行逐位and(
&
)。这意味着您不必添加更多的if/else块来检查更多位。例如:

#包括
int main(){
int标志=7;
int n=3;//将其更改为要检查的位数
对于(int i=0;i可能类似于:

 char flags[] = { 0x01, 0x02, 0x04, 0x08 };
 int i;
 for(i = 0 ; i < sizeof(flags) ; i++ )
   if(flag & flags[i])
     printf("flag is %i\n",i + 1);
char标志[]={0x01、0x02、0x04、0x08};
int i;
对于(i=0;i
可能类似于:

 char flags[] = { 0x01, 0x02, 0x04, 0x08 };
 int i;
 for(i = 0 ; i < sizeof(flags) ; i++ )
   if(flag & flags[i])
     printf("flag is %i\n",i + 1);
char标志[]={0x01、0x02、0x04、0x08};
int i;
对于(i=0;i
可能类似于:

 char flags[] = { 0x01, 0x02, 0x04, 0x08 };
 int i;
 for(i = 0 ; i < sizeof(flags) ; i++ )
   if(flag & flags[i])
     printf("flag is %i\n",i + 1);
char标志[]={0x01、0x02、0x04、0x08};
int i;
对于(i=0;i
可能类似于:

 char flags[] = { 0x01, 0x02, 0x04, 0x08 };
 int i;
 for(i = 0 ; i < sizeof(flags) ; i++ )
   if(flag & flags[i])
     printf("flag is %i\n",i + 1);
char标志[]={0x01、0x02、0x04、0x08};
int i;
对于(i=0;i
基本上,您希望打印出标志中设置的位。为此,您可以使用循环和右移

for(int位=0;标志>0;++位,标志>>=1){
如果(标志&1)
printf(“标志为%d\n”,位);
}

请注意,这将破坏
标志的值,因此,如果以后要再次使用,请复制该标志。

基本上,您希望打印出标志中设置的位。为此,可以使用循环和右移

for(int位=0;标志>0;++位,标志>>=1){
如果(标志&1)
printf(“标志为%d\n”,位);
}

请注意,这将破坏
标志的值,因此,如果以后要再次使用,请复制该标志。

基本上,您希望打印出标志中设置的位。为此,可以使用循环和右移

for(int位=0;标志>0;++位,标志>>=1){
如果(标志&1)
printf(“标志为%d\n”,位);
}

请注意,这将破坏
标志的值,因此,如果以后要再次使用,请复制该标志。

基本上,您希望打印出标志中设置的位。为此,可以使用循环和右移

for(int位=0;标志>0;++位,标志>>=1){
如果(标志&1)
printf(“标志为%d\n”,位);
}

请注意,这将破坏
标志的值,因此如果以后要再次使用,请复制它。

您的意思是:标志==001 printf“标志为0”?您的意思是:标志==001 printf“标志为0”?您的意思是:标志==001 printf“标志为0”?您的意思是:标志==001 printf“标志为0”?