c++ for循环中的布尔运算符
boolean operator in for loop in c++
我知道如何用Java编程,但我正在努力学习c++。我试着做一些比赛,他们给你一个算法,你试着用任何你想用的语言来解决它。
我被困在一个算法和搜索中,我发现这段代码可能对我有帮助,但我对for循环语句的最后一部分有点困惑
int N,K;
scanf("%d %d",&N,&K);
for(int j = 0,x;j<N;++j){
scanf("%d",&x);
x = N+1-x;
for(int idx = x-1;idx>0;idx -= (idx & -idx)) aux2 += T[idx];
我在部分感到困惑:
idx -= (idx & -idx)
我知道"-="等价于:
idx = idx - (idx & -idx)
,我知道"&"是逻辑运算与但是我不知道怎么用布尔值来操作整数…对于像我这样的Java人来说,这有点令人困惑。
我想知道是否有人能帮我一下。
表达式idx -= (idx & -idx)
设置idx
中1到0的最低位。
例如10001010010 ==> 10001010000。
所以上面循环的迭代次数等于idx
中1的次数。
顺便说一句,执行此操作的更简单的方法是使用idx &= idx-1
。
SWAR算法被认为是计算1个数最有效的方法。
位运算符可以很好地操作其实参的每一位。特别地,&
应用AND运算符,因此一个例子(对于4位参数)将是
0101
& 1011
------
0001
你混淆了位运算符和布尔运算符
-
operator &
是二进制(又名位) AND运算符。在整数的情况下,它对每个位进行与操作。例如:1 & 2
=0
。 -
operator &&
是布尔和运算符(又称逻辑与)。在c++中,它接受两个值(不仅是bool
,int
s也可以),并检查它们是否都是true
(在整数的情况下-不等于0
)。
在c++中,idx && -idx
也是合法的,如果idx
不是0
,它将等于true
,但它不会像当前版本那样做。
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 了解布尔运算符==(参数 1,参数 2)
- 我在使用相等性测试布尔运算符时遇到问题
- 为什么C++找不到布尔运算符,当有一个!范围内的运算符?
- 如何在具有同一类指针的类中编写布尔运算符?
- static_cast为int时删除布尔运算符时出错
- 为什么定义了布尔"++"运算符?但是"--"不在C++
- 错误:布尔运算符==必须正好接受两个参数
- 布尔运算符,在C++中有没有一种简单的方法可以做到这一点
- 在这种情况下,使布尔运算符过载是否危险
- 二进制布尔运算符是否具有关联性
- 我是否错误地使用了布尔运算符
- 布尔运算符问题
- 使用布尔运算符扫描时
- 分数布尔运算符
- 如果您意外地使用布尔运算符 (||, &&) 比较常量,则发出警告
- 这个布尔运算符在C++中实际做了什么?这个奇怪的东西怎么会有用呢
- 如何在c++中一次读取多个布尔运算符
- c++ for循环中的布尔运算符
- 具有非布尔运算符的高维搜索树