当前位置:  编程技术>c/c++/嵌入式

优秀程序员必须知道的20个位运算技巧

    来源: 互联网  发布时间:2014-10-20

    本文导语:  一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《...

一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一个普通的程序中大量运用这样的代码的人简直是疯了!但掌握简单的位运算技巧还是必要的,所以今天写这篇文章把我积累的一些位运算技巧分享给大家,这些技巧不会是如求“1的数目”的技巧,是最基本的一行位运算技巧!

一.获得int型最大值

代码如下:

int getMaxInt(){ 
        return (1 31)) - (n >> 31); 
/* n>>31 取得n的符号,若n为正数,n>>31等于0,若n为负数,n>>31等于-1
若n为正数 n^0=0,数不变,若n为负数有n^-1 需要计算n和-1的补码,然后进行异或运算,
结果n变号并且为n的绝对值减1,再减去-1就是绝对值 */ 
}

十一.取两个数的最大值(某些机器上,效率比a>b ? a:b高)

通用版

代码如下:

int max(int a,int b){ 
    return b&((a-b)>>31) | a&(~(a-b)>>31); 
    /*如果a>=b,(a-b)>>31为0,否则为-1*/ 


C语言版
代码如下:

int max(int x,int y){ 
    return x ^ ((x ^ y) & -(x < y)); 
    /*如果x>31) | b&(~(a-b)>>31); 
    /*如果a>=b,(a-b)>>31为0,否则为-1*/ 
}

C语言版
代码如下:

int min(int x,int y){ 
    return y ^ ((x ^ y) & -(x < y)); 
         /*如果x 0 
    return 2 1;  


另一种写法
代码如下:

int getAverage(int x, int y){ 
        return ((x^y) >> 1) + (x&y);  
     /*(x^y) >> 1得到x,y其中一个为1的位并除以2,
       x&y得到x,y都为1的部分,加一起就是平均数了*/ 

}  

下面是三个最基本对二进制位的操作

十八.从低位到高位,取n的第m位

代码如下:

int getBit(int n, int m){ 
    return (n >> (m-1)) & 1; 


十九.从低位到高位.将n的第m位置1
代码如下:

int setBitToOne(int n, int m){ 
    return n | (1

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 分享Java程序员应该知道的10个调试技巧
  • 程序员的八种级别,你属于哪一级?
  • linux的程序员是不是比windows程序员的薪水高啊?
  • 程序员赚钱致富的6种方法
  • 在linux平台下的软件开发 需要什么样的程序员多一点啊 C.C++ 还是JAVA程序员阿???
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • Linux Kernel/Network 技术QQ群14888802,只加有内核开发、TCP/IP协议栈开发的程序员,不加新手和做应用开发的程序员。
  • 42岁程序员,今天我失业了,怎么办?
  • Linux程序员在公司里做什么程序?(Linux程序员请进)
  • 程序员跳槽前需仔细思考:你是否做到以下10点?
  • 请问有10年的unix c程序设计经验,在北京、上海、广州、深圳、武汉各会有多少月薪?liunx/unix程序员的月薪比vc/bcb程序员的月薪如何?
  • 必看!程序员升级之路,看了可以少走很多弯路
  • 调查:windows 程序员多还是 linux/unix 程序员多?
  • 对于一个程序员来说,学习linux程序设计和unix编程到底有什么好处
  • 我迷惑:做jsp,servlet算不算真正的JAVA程序员?要达到JAVA程序员的标准都要做哪方面的程序?
  • 请教所有java程序员和准程序员,说说吧!
  • 这里有没有在mac os下开发程序的程序员啊?
  • 一个老程序员的观点:Linux程序/内核设计是一门技术,Windows下的可扩展、可复用架构设计是一门艺术!
  • OSS让程序员怎么过?
  • 找程序员
  • linux程序员一般月薪多少?
  • 程序员文本编辑器 Minimum Profit




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3