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”?