Java开发20个位运算方法.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
20个位运算技巧 一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hackers Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一个普通的程序中大量运用这样的代码的人简直是疯了!但掌握简单的位运算技巧还是必要的,所以今天写这篇博文把我积累的一些位运算技巧分享给大家,这些技巧不会是如求“1的数目”的技巧,是最基本的一行位运算技巧! 1.获得int型最大值 [cpp] view plaincopy int getMaxInt(){ return (1 31) - 1;//2147483647, 由于优先级关系,括号不可省略 } 另一种写法 [cpp] view plaincopy int getMaxInt(){ return ~(1 31);//2147483647 } 另一种写法 [cpp] view plaincopy int getMaxInt(){//有些编译器不适用 return (1 -1) - 1;//2147483647 } C语言中不知道int占几个字节时候 [java] view plaincopy int getMaxInt(){ return ((unsigned int) - 1) 1;//2147483647 } 2.获得int型最小值 [cpp] view plaincopy int getMinInt(){ return 1 31;//-2147483648 } 另一种写法 [cpp] view plaincopy int getMinInt(){//有些编译器不适用 return 1 -1;//-2147483648 } 3.获得long类型的最大值 C语言版 [cpp] view plaincopy long getMaxLong(){ return ((unsigned long) - 1) 1;//2147483647 } JAVA版 [java] view plaincopy long getMaxLong(){ return ((long)1 127) - 1;//9223372036854775807 } 获得long最小值,和其他类型的最大值,最小值同理. 4.乘以2运算 [cpp] view plaincopy int mulTwo(int n){//计算n*2 return n 1; } 5.除以2运算 [cpp] view plaincopy int divTwo(int n){//负奇数的运算不可用 return n 1;//除以2 } 6.乘以2的m次方 [cpp] view plaincopy int mulTwoPower(int n,int m){//计算n*(2^m) return n m; } 7.除以2的m次方 [cpp] view plaincopy int divTwoPower(int n,int m){//计算n/(2^m) return n m; } 8.判断一个数的奇偶性 [java] view plaincopy boolean isOddNumber(int n){ return (n 1) == 1; } 9.不用临时变量交换两个数(面试常考) C语言版 [cpp] view plaincopy void swap(int *a,int *b){ (*a) ^= (*b) ^= (*a) ^= (*b); } 通用版(一些语言中得分开写) [java] view plaincopy a ^= b; b ^= a; a ^= b; 10.取绝对值(某些机器上,效率比n0 ? n:-n 高) [cpp] view plaincopy int abs(int n){ return (n ^ (n 31)) - (n 31); /* n31 取得n的符号,若n为正数,n31等于0,若n为负数,n31等于-1 若n为正数 n^0=0,数不变,若n为负数有n^-1 需要计算n和-1的补码,然后进行异或运算, 结果n变号并且为n的绝对值减1,再

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档