[英]bitiwise exclusive or ^ with stdbool.h bool types in C and assignment
我有一个玩具程序,其中使用<stdbool.h>
库使用类型bool
。 我有一些bool
数组,以下命令循环运行。
我已经在线阅读了我不应该对布尔使用逐位逻辑。 他们似乎在这里工作。 这仅仅是我的编译器的运气不好,还是我只是误解了有关按位运算符的警告?
#include <stdio.h>
#include <stdbool.h>
#define N 5
int main(void) {
bool a[N] = { true, true, false, false, false };
bool b[N] = { true, false, false, true, false };
/* to count how many pairs are opposite */
int count = 0;
for (int i = 0; i < N; ++i){ count += (a[i] ^ b[i]); }
printf(" # pairs opposite: %i\n", count);
/* flip the values of a */
for (int i = 0; i < N; ++i){
a[i] = (a[i] ^ true);
printf(" %i", a[i]);
}
printf("\n");
/* flip only the value of a that are true in b */
for (int i = 0; i < N; ++i){
a[i] = (a[i] ^ b[i]);
printf(" %i", a[i]);
}
printf("\n");
}
在C中, true
和false
的值分别为1
和0
。 这样就可以了。
但是,您必须记住,所有非零值均为“ true”。 因此,除非您具有true
或1
,否则其他任何“ true”值都将无法执行按位运算所期望的操作。
示例: 2
和1
均为“ true”,但2 & 1
则不是 “ true”。
我已经在线阅读了我不应该对布尔使用逐位逻辑。 他们似乎在这里工作。 这仅仅是我的编译器的运气不好,还是我只是误解了有关按位运算符的警告?
stdbool的bool
是标准_Bool
类型的别名,标准_Bool
类型声明为标准无符号整数类型之一。 结果, _Bool
值是按位运算符的有效操作数,并且涉及它们的按位运算具有明确定义的结果。 此外,将任何标量值转换为_Bool
类型时,结果_Bool
0或1,具体取决于原始值是否等于0。
因此,如果您认为警告告诉您编译器可能会拒绝您的特定示例代码,或者所生成的程序的行为可能与您使用unsigned int
代替_Bool
行为不同,那么是的,您确实误解了警告。
正如其他人已经指出,这更多的是关于非的布尔解释- _Bool
总比关于位运算_Bool
秒。 具体而言,按位操作,其中操作数中的至少一个是非的结果的布尔解释_Bool
不一定一样的相应的逻辑操作的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.