程序设计中二进制的魅力

来源:互联网 发布:电子琴节奏软件 编辑:程序博客网 时间:2024/04/28 14:56

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、二进制与位运算</span>

要谈二进制,不得不谈一下位运算。关于二进制的操作都是基于位运算的。位运算的显著特点就是效率高

基本操作:<<   >>  ^  &  |   ~  !  

位运算常用基础:

判断奇偶性:

<span style="font-size:12px;">x&1==0 //为偶数</span>
<span style="font-size:12px;"></span>


求平均值:求(x+y)/2时,可能x+y会超过int的最大值,可以用位运算来求:
<span style="font-weight: normal;">int Ave(int x,int y)  {   return x&y+((x^y)>>1);  } </span>

判断一个数是否是2的n次幂

<span style="font-size:12px;">x&&!(<span style="color:#ff0000;">x&(x-1)</span>)//表达式为真表示x是2^n,x去除0这种特殊情况</span>


正整数的运算

x>>n;//x除以2的n次幂


取模运算

<span style="font-size:12px;">x&(2^k-1);///x对2^k取模</span>


交换两个数

<span style="font-size:12px;">a^=b;b^=a;a^=b;</span>


计算绝对值

int abs(int x){int y;y=x>>31;return (x^y)-y;}

快速幂运算

<span style="font-size:12px;">int pows(int a,int b){int ans=1,tmp=a;while(b!=0){if(b&1)ans*=tmp;tmp*=tmp;b>>1;}return ans;}</span>
蒙哥利马幂模运算

<span style="font-size:12px;">//前提:(a*b) % c = (a%c) * b % c;   //(公式1)(a*b) % c = (a%c) * b % c = (b%c) * (a%c) % c = (a%c) * (b%c) % c;        ///【公式二】</span>
核心基于快速密运算

<span style="font-size:12px;">int expMod2(int a,int b,int mod){int tx=a;int ans=1;tx%=mod;while(b!=0){if(b&1)ans=ans*tx%mod;b=(b>>1);tx=tx*tx%k;}return ans;}</span>









0 0
原创粉丝点击