羽儇 @ 2019-10-17 06:59:57
for(int i = 0 ;i < N ; i++)
{
for(int j = 1 ;j <= M ; j++)
cin>>ch,a[i] = a[i] << 1 + (ch == 'H' ? 1 : 0 );
}
for(int i = 0 ;i < N ; i++)
{
for(int j = 1 ;j <= M ; j++)
cin>>ch,a[i] = a[i] << 1, a[i]+= (ch == 'H' ? 1 : 0 );
}
有何区别呢,第一个输入代码,样例输出
而第二个样例输出
by caidzh @ 2019-10-17 07:15:19
@羽儇 位运算优先级玄学,建议要加括号的时候加括号
by caidzh @ 2019-10-17 07:16:12
a[i] = a[i] << 1 + (ch == 'H' ? 1 : 0 )
这里是因为后面的加法先算了
by 羽儇 @ 2019-10-17 07:41:11
@土田共戈 嗯嗯
by Inkyo @ 2019-10-17 07:42:04
同上。
位运算优先级低于加号。
来自一位写线段树把 p<<1|1
写成p<<1+1
然后调了半天代码的蒟蒻的怒吼
by Zhou_JK @ 2019-10-17 08:10:05
@土田共戈 Orz位运算神仙
by 1saunoya @ 2019-10-17 08:23:03
@羽儇 您好 您第一个式子是
x = x<<(……)
第二个是
x=(x<<1)+……
by 羽儇 @ 2019-10-17 08:35:18
当时没有考虑到<<
会把后面的+
记进去的情况,此贴终结
by 羽儇 @ 2019-10-17 08:53:24
将
for(int i = 0 ;i < N ; i++)
{
for(int j = 1 ;j <= M ; j++)
cin>>ch,a[i] = a[i] << 1 | (ch == 'H' ? 1 : 0 );
}
by caidzh @ 2019-10-17 12:02:01
@Zhou_JK ???