-
与、或、非、异或 运算
都是二进制运算与“ & “
都是1才得1
0&0 = 0
1&0 = 0
0&1 = 0
1&1 = 1
例如 5&12 = 4
0 1 0 1 = 5
1 1 0 0 =12
.------------
0 1 0 0 =4或 " |"
只要有一个是1,就得1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
1 | 1 = 1
例如 5|12 =13
0 1 0 1 =5
1 1 0 0 =12
.------------
1 1 0 1 =13非 " ~"
取反
~1 =0
~0 =1
例如:
~5 = 10
0 1 0 1 = 5
.-------
1 0 1 0 =10异或 " ^ "
两个不一样,才得1
1^1 = 0
1^0 = 1
0^1 = 1
0^0 = 1
例如:
5^12 = 9
0 1 0 1 = 5
1 1 0 0 =12
.---------
1 0 0 1 = 9 -
移位操作
右移
>>
二进制向右移动, 移动掉的最右边的几位舍弃左移
<<
向左移动几位,最右边补0 -
汉明距离就是二进制数,不同的个数,所以要用到异或操作
^
,如下两行
0 1 0 1 1
0 0 1 1 1
首先对这两个数进行异或^
运算,得到
0 1 1 0 0
统计1的个数,所以汉明距离就是1的个数:2 -
c++进行
与&
,或|
,非~
,异或^
,移位>>, <<
操作,计算汉明距离#include<iostream> #include<cmath> using namespace std; int main() { unsigned int a = 5; //0 1 0 1 unsigned int b = 12; //1 1 0 0 //与 cout<<"a&b = "<< (a&b) <<endl; //4 //或 cout<<"a|b = "<< (a|b) <<endl; //13 //非 //~a只能要后4位 int a_=(~a); int a1=0; for(int i=0;i<4;i++) { a1=a1+pow(2,i)*(a_&1); //a_&1 是取a_ 二进制最后一位 a_ = (a_>>1); //a_ 右移一位 } cout<<"~a = " << (a1) <<endl; //10 //异或 cout<<"a^b = "<< (a^b) <<endl; //9 //移位 cout<<"a>>2 = "<<(a>>2)<<endl; //0101 >>2 01 = 1 cout<<"a<<2 = "<<(a<<2)<<endl; //0101 <<2 010100 = 20 //汉明距离 int c = (a^b); //就是统计a^b中1的个数 int dist = 0; while(c!=0) { dist += (c&1); //最后一位是1 就是1 c>>=1; //就是 c = (c>>1) } cout<<"汉明距离: "<<dist<<endl; //2 return 0; }
运行结果:
a&b = 4 a|b = 13 ~a = 10 a^b = 9 a>>2 = 1 a<<2 = 20 汉明距离: 2
c++进行按位与、或、非、异或、移位运算, 计算汉明距离
最新推荐文章于 2024-09-03 12:35:43 发布