网站建设步骤 文档,友情链接检测659292,深圳画册设计公司排名,正规网站建设模板1.什么是异或#xff1f;
异或#xff1a;对于二进制#xff0c;相同为0 不同为11 ⊕ 1 00 ⊕ 0 01 ⊕ 0 10 ⊕ 1 1
2.异或的好处#xff1f; 异或的好处#xff1f;1.快速比较两个值 2.xor a a例如 a 3 011xor 0110003.可以使用 异或 来使某些特定的位翻转【原因… 1.什么是异或
异或对于二进制相同为0 不同为11 ⊕ 1 00 ⊕ 0 01 ⊕ 0 10 ⊕ 1 1
2.异或的好处 异或的好处1.快速比较两个值 2.xor a a例如 a 3 011xor 0110003.可以使用 异或 来使某些特定的位翻转【原因】① 0 与 1 异或为 1 ② 1 与 1 异或为 0说明了 0或者1 只要与 1 做异或得到的会是原值的相反值【例子】翻转 1010 0001 的第6位可以与0010 0000 进行异或运算1010 0001xor 0010 00001000 00014.使用 异或 来判断一个二进制中 1 的数量是奇数还是偶数【例子】求 1010 0001中 1 的数量是奇数还是偶数1 ^ 0 ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 1 1,结果为1就是奇数个1结果为0就是偶数个15.校验和恢复6.交换两个值在不使用其他空间的情况下a a ^ b;b a ^ b;a a ^ b;7.二进制交换奇偶位① 取出所有的偶数位 ---- 与1010 1010 1010...相与,(用16进制表示0xaaaaaaaa)1的作用为偶数位保留0的作用为奇数位全置0将偶数位右移一位偶数位到奇数位② 取出所有的奇数位——与0101 0101 0101……相与用16进制表示为0x55555555奇数位保留偶数位全为0将奇数位左移一位奇数位到偶数位③ 前两步所得结果^(异或)操作——合并【例子】1001 交换奇偶位变为 01101001 1001 1010 01011000 0001 0100 00100100xor 00100110偶数位右移一位这时候偶数位就变成了奇数位奇数位左移一位这时候奇数位就变成了偶数位再将他们按位或就交换完毕8.只出现一次的数给定一个非空整数数组除了某个元素只出现一次以外其余每个元素均出现两次。找出那个只出现了一次的元素【原因】因为一个数出现两次就会抵消为0 #include iostream
#include vector
using namespace std;// 1.快速比较两个值
int test1(int a,int b) {if((a^b) 0) return 1;else return 0;
}// 6.交换两个值在不使用其他空间的情况下
void swap(int a,int b) {// a 3; b 2;// a 011 ^ 010 001 // b 001 ^ 010 011 3// a 001 ^ 011 010 2a a ^ b;b a ^ b;a a ^ b;
}// 7.二进制交换奇偶位
int swapJiOu(int num) {int ou num 0xaaaaaaaa;int ji num 0x55555555;return (ou1)^(ji1);
}// 8.只出现一次的数
int singleNumber(vectorint arr) {int single 0;for(int num : arr) {single ^ num;}return single;
}int main() {int a 3;int b 2;if(test1(a,b))cout两值相等endl;else cout两值不相等endl;couta的值是: a ,b的值是: b endl;swap(a,b);couta的值是: a ,b的值是: b endl;coutswapJiOu(9)endl;vectorint arr{4,1,2,1,2};cout singleNumber(arr) endl;// 0100 4// xor 0001 1//---------------// 0101 // xor 0010 2 //---------------// 0111 // xor 0001 1//---------------// 0110 // xor 0010 2 // 0100 4return 0;
}
打印如下
hehedaheheda:~/Linux/内存对齐$ g xor.cpp -o app
hehedaheheda:~/Linux/内存对齐$ ./app
两值不相等
a的值是: 3 ,b的值是: 2
a的值是: 2 ,b的值是: 3
6
4