杭电oj 2095 & 异或^符号在C/C++中的使用
2015-05-26 23:39
435 查看
异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果。
值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终结果。
特点:任何数和0异或都等于它本身;两个相同的数异或后的结果是0;
举例如下:
int a = 4 =100(二进制)
int b = 3 =011(二进制)
int c = a^b = 111 = 7;
下面就^常用应用做个介绍:
1. 在一排数中找到独一无二的一个数
本例启发来自于杭电oj 2095,在一排数字中,如果某一个数字的出现次数是奇数,则可以唯一判断出来。(代码为oj2095 题解)
2.实现两个数的交换
a=a^b;
b=a^b;//b=a^b^b=a^0=a;
a=a^b;//a=a^a^b=0^b=b;
3.判断两个数是否相等
if(a^b==0)
printf("a=b");
else
printf("a!=b");
值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终结果。
特点:任何数和0异或都等于它本身;两个相同的数异或后的结果是0;
举例如下:
int a = 4 =100(二进制)
int b = 3 =011(二进制)
int c = a^b = 111 = 7;
下面就^常用应用做个介绍:
1. 在一排数中找到独一无二的一个数
本例启发来自于杭电oj 2095,在一排数字中,如果某一个数字的出现次数是奇数,则可以唯一判断出来。(代码为oj2095 题解)
#include<stdio.h> int main() { int T; while(scanf("%d",&T)!=EOF && T) { int a,result=0; while(T--) { scanf("%d",&a); result = result^a; } printf("%d\n",result); } return 0; }
2.实现两个数的交换
a=a^b;
b=a^b;//b=a^b^b=a^0=a;
a=a^b;//a=a^a^b=0^b=b;
#include<stdio.h> int main() { int a=3; int b=4; a=a^b; b=a^b; a=a^b; printf("a:%d b:%d",a,b); return 0; }
3.判断两个数是否相等
if(a^b==0)
printf("a=b");
else
printf("a!=b");
相关文章推荐
- 为什么要同时使用和&符号(c++) 转载
- C++ 为什么要同时使用*和&符号?以及什么场合使用这种声明方式?
- 杭电oj2095用到了异或运算!
- (转)C++异或运算和位运算(C的|、||、&、&&、异或、~、!运算)
- C++中*与&的使用和辨析
- C++ fstream的使用入门
- C++中使用pthread.h头文件报错 - 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用
- C++连接Mysql数据库 & 使用预处理读写BLOB
- Mac OSX & Windows上如何使用SWIG (c++ android 示例)
- (C++)vector & list 的使用和模拟实现
- MongoDB&C++开发 (六)使用bsoncxx::builder::stream和$push在数组中插入元素
- php 取地址&符号使用遇到的一个问题
- C++ 把枚举变量的名称,直接当字符串使用方法 字符串化符号 #
- C++中使用pthread.h头文件报错 - 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用
- 杭电oj 1075 map的使用
- [C/C++]OJ练习题: 压缩字符串&还原压缩字符串 [栈训练]
- 杭电oj2708 c++第四章
- C++&MATLAB混合编程之mwArray使用实例
- 使用Xcode阅读Makefile管理的C/C++项目源码(支持调试,符号跳转,自动补全)
- 【c++语言基础】在c++里&符号的用法