按位运算小结

来源:互联网 发布:VPN服务器指向域名 编辑:程序博客网 时间:2024/05/08 02:05

之前看python基础语句的时候,看菜鸟教程里面有一个程序非常有意思,当时看半天也没看懂,后来理解了以下,发现虽然它的用途具有很大的局限性,但是却有趣,里面用了很多位运算,值得学习,翻译成c语句如下

#include<stdio.h>
int main(){
 for(int i=6;i<=58;i++){
  
  int a = i>>4&3;
  int b = i>>2&3;
  int c = i&3;
 
  if((a^b)&&(b^c)&&(c^a))
   printf("%d %d %d\n",a+1,b+1,c+1);
  
  
 }
 
}

这个程序是输出 由 1,2,3,4这四个数 中的任意选3位互不重复的数组成的所有可能情况
从中明白了 如果有一个整数x ,那么x&3===x%4
后来进行尝试,发现了x&7===x%8

进行推广发现,x&n===x%(n+1)    //当n属于{x|x=2^k-1,k属于N+}

后来联想到 判断x是否是奇数的判别式可以由  x%2 转换成x&1

位运算的效率传说是最高的

除此之外,还知道了按位或运算   a^b  等价于 a!=b 等价于 a-b

还有右移位运算

若有一个数x,则
x>>1,为x/2
x>>2,为x/4
得到结论x>>n 等价于 x/(2^n)
继而 x*10  等价于 (x<<3) + (x<<1)

 

原创粉丝点击