s^=a[i];什么意思 C语言
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/24 17:27:16
s^=a[i];什么意思 C语言
#include
int a[101];
int main()
{
int m,s,i;
while(scanf("%d",&m) && m)
{
s = 0;
for(i = 0;i < m;i++)
{
scanf("%d",&(a[i]));
s ^= a[i];
}
if(s == 0)
printf("0\n");
else
{
int cnt = 0;
for(i = 0;i < m;i++)
{
s ^= a[i]; //选一堆
if (a[i] > s) //如果剩余的堆异或得到的值 小于 这一堆 ,才能赢.
cnt++;
s ^= a[i]; //重新把这堆加进去,准备选下一堆
}
printf("%d\n",cnt);
}
}
return 0;
}
这就是代码,输入3
5 7 9
返回1;输入0时结束;
s ^= 如果是s=s^a[i];
输入5时应该是 s=0^5=0才对啊,为什么是s=5?
#include
int a[101];
int main()
{
int m,s,i;
while(scanf("%d",&m) && m)
{
s = 0;
for(i = 0;i < m;i++)
{
scanf("%d",&(a[i]));
s ^= a[i];
}
if(s == 0)
printf("0\n");
else
{
int cnt = 0;
for(i = 0;i < m;i++)
{
s ^= a[i]; //选一堆
if (a[i] > s) //如果剩余的堆异或得到的值 小于 这一堆 ,才能赢.
cnt++;
s ^= a[i]; //重新把这堆加进去,准备选下一堆
}
printf("%d\n",cnt);
}
}
return 0;
}
这就是代码,输入3
5 7 9
返回1;输入0时结束;
s ^= 如果是s=s^a[i];
输入5时应该是 s=0^5=0才对啊,为什么是s=5?
![s^=a[i];什么意思 C语言](/uploads/image/z/1317505-49-5.jpg?t=s%5E%3Da%5Bi%5D%3B%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D+C%E8%AF%AD%E8%A8%80)
异或运算:同则0,异则1
0 = 0 0 0 0
5 = 0 1 0 1
--------------
0 1 0 1 = 5
0 = 0 0 0 0
5 = 0 1 0 1
--------------
0 1 0 1 = 5