异或运算符在这个程序中是如何起作用的
How does the XOR operator function in this program?
我找到了一个解决Sock Merchant HackerRank问题(https://www.hackerrank.com/challenges/sock-merchant)的方法,如下:
using namespace std;
int main(){
int n;
cin>>n;
int i;
int arr[n];
for(i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
int c=0;
for(i=0;i<n;i++)
{
if((arr[i]^arr[i+1])==0)
{
c++;
i++;
}
}
cout<<c<<endl;
return 0;
}
我真的不明白if语句中发生了什么。我在某处读到^是一个XOR
符号,但我不明白它在这个程序中的作用....
按位异或(https://en.wikipedia.org/wiki/Bitwise_operation#XOR)
arr[我]^ arr (i + 1)
检查arr[i]
和arr[i+1]
是否不同(如果不相同返回1,否则返回0)。更准确地说,(arr[i]^arr[i+1])
是一个布尔表达式,因此如果两个数字不同,则返回true
,否则返回false
。
c++中^
是xor
运算符:http://en.cppreference.com/w/cpp/keyword/xor/https://en.m.wikipedia.org/wiki/Exclusive_or
如果数字相同,按位异或操作如下,例如
1011 0110
1011 0110
---- ----
0000 0000
如果数字不同(即使只有1位),则例如:
1011 1110
1011 0110
---- ----
0000 1000
基本上:
if((arr[i]^arr[i+1])==0)
//is the same as
if (arr[i] == arr[i+1])
按位XOR
运算用于检查变量1和变量2是否不同。在您的示例中,arr[i]
和arr[i+1]
是否相同或不同。
same ^ same = false
same ^ different = true
different ^ same = true
different ^ different = false
这是我能想到的最简单的解释。
按位异位的概念是
相同值的xor将为0和
不同值的值为1
您没有检查数组索引
if((arr[i]^arr[i+1])==0)
{
c++;
i++;
}
arr[i+1]已超过索引的最大限制。
最终代码
int main(){
int n;
cin>>n;
int i;
int arr[n];
for(i=0;i<n;i++)
cin>>arr[i];
sort(arr,arr+n);
int c=0;
for(i=1;i<n;i++)
{
if((arr[i]^arr[i-1])==0)
{
c++;
i++;
}
}
cout<<c<<endl;
return 0;
}
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- sigwait() 在多线程程序中不起作用
- 为什么使用数组元素查找最大数字的程序不起作用?
- C++实用程序::转换在静态链接库中不起作用
- Cuda 基本程序 (将值写入矩阵和 std:cout 不起作用) ;主功能不启动
- 视窗 10 :笔(手写笔)在 MFC 应用程序上不起作用
- win32 滚动条在 C/C++ 程序中不起作用
- 用于拆分空格字符串的程序不起作用
- 反转一个数字程序不起作用,为什么?
- C++ 程序在代码块 IDE 中不起作用
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 程序在CLion IDE中工作,但exe不起作用
- Opencv在2013年第5季度不起作用.应用程序总是在窗口中崩溃
- C++从句子中删除给定字符的程序不起作用
- C ++ GCC 内联程序集似乎不起作用
- 为什么当我选择>250000个采样点时,程序不起作用?
- 任务计划程序库的预处理不起作用 - 多定义错误
- C 为什么我的程序循环和"if-statements"不起作用?
- try() 和 catch() 不起作用;程序崩溃,从不执行 catch() 块
- Cin 执行不起作用 (程序.exe <文件与数据.txt)