Java位移操作.docx_第1页
Java位移操作.docx_第2页
Java位移操作.docx_第3页
Java位移操作.docx_第4页
Java位移操作.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Welcome To MyBitTricks1.获得int型最大值cpp view plaincopyprint?1. intgetMaxInt()2. return(131)-1;/2147483647,由于优先级关系,括号不可省略3. int getMaxInt() return (1 31) - 1;/2147483647, 由于优先级关系,括号不可省略另一种写法cpp view plaincopyprint?1. intgetMaxInt()2. return(131);/21474836473. int getMaxInt()return (1 31);/2147483647另一种写法cpp view plaincopyprint?1. intgetMaxInt()/有些编译器不适用2. return(1-1)-1;/21474836473. int getMaxInt()/有些编译器不适用return (1 1;/21474836473. int getMaxInt()return (unsigned int) - 1) 1;/21474836472.获得int型最小值cpp view plaincopyprint?1. intgetMinInt()2. return131;/-21474836483. int getMinInt()return 1 31;/-2147483648 另一种写法cpp view plaincopyprint?1. intgetMinInt()/有些编译器不适用2. return1-1;/-21474836483. int getMinInt()/有些编译器不适用return 1 1;/21474836473. long getMaxLong()return (unsigned long) - 1) 1;/2147483647JAVA版java view plaincopyprint?1. longgetMaxLong()2. return(long)1127)-1;/92233720368547758073. long getMaxLong()return (long)1 127) - 1;/9223372036854775807获得long最小值,和其他类型的最大值,最小值同理.4.乘以2运算cpp view plaincopyprint?1. intmulTwo(intn)/计算n*22. returnn1;3. int mulTwo(int n)/计算n*2 return n 1;/除以23. int divTwo(int n)/负奇数的运算不可用return n 1;/除以26.乘以2的m次方cpp view plaincopyprint?1. intmulTwoPower(intn,intm)/计算n*(2m)2. returnnm;3. int mulTwoPower(int n,int m)/计算n*(2m)return n m;3. int divTwoPower(int n,int m)/计算n/(2m)return n m;8.判断一个数的奇偶性java view plaincopyprint?1. booleanisOddNumber(intn)2. return(n&1)=1;3. boolean isOddNumber(int n)return (n & 1) = 1;9.不用临时变量交换两个数(面试常考)C语言版cpp view plaincopyprint?1. voidswap(int*a,int*b)2. (*a)=(*b)=(*a)=(*b);3. void swap(int *a,int *b)(*a) = (*b) = (*a) = (*b);通用版(一些语言中得分开写)java view plaincopyprint?1. a=b;2. b=a;3. a=b;a = b;b = a;a = b;10.取绝对值(某些机器上,效率比n0 ? n:-n 高)cpp view plaincopyprint?1. intabs(intn)2. return(n(n31)-(n31);3. /*n31取得n的符号,若n为正数,n31等于0,若n为负数,n31等于-14. 若n为正数n0=0,数不变,若n为负数有n-1需要计算n和-1的补码,然后进行异或运算,5. 结果n变号并且为n的绝对值减1,再减去-1就是绝对值*/6. int abs(int n)return (n (n 31) - (n 31);/* n31 取得n的符号,若n为正数,n31等于0,若n为负数,n31等于-1若n为正数 n0=0,数不变,若n为负数有n-1 需要计算n和-1的补码,然后进行异或运算,结果n变号并且为n的绝对值减1,再减去-1就是绝对值 */11.取两个数的最大值(某些机器上,效率比ab ? a:b高)通用版cpp view plaincopyprint?1. intmax(inta,intb)2. returnb&(a-b)31)|a&(a-b)31);3. /*如果a=b,(a-b)31为0,否则为-1*/4. int max(int a,int b)return b & (a-b) 31) | a & (a-b) 31);/*如果a=b,(a-b)31为0,否则为-1*/C语言版cpp view plaincopyprint?1. intmax(intx,inty)2. returnx(xy)&-(xy);3. /*如果xyxy返回1,否则返回0,4. 、与0做与运算结果为0,与-1做与运算结果不变*/5. int max(int x,int y)return x (x y) & -(x y);/*如果xy xb ? b:a高)通用版cpp view plaincopyprint?1. intmin(inta,intb)2. returna&(a-b)31)|b&(a-b)31);3. /*如果a=b,(a-b)31为0,否则为-1*/4. int min(int a,int b)return a & (a-b) 31) | b & (a-b) 31);/*如果a=b,(a-b)31为0,否则为-1*/C语言版cpp view plaincopyprint?1. intmin(intx,inty)2. returny(xy)&-(xy);3. /*如果xyxy返回1,否则返回0,4. 与0做与运算结果为0,与-1做与运算结果不变*/5. int min(int x,int y)return y (x y) & -(x y); /*如果xy x=0;/true表示x和y有相同的符号,false表示x,y有相反的符号。3. boolean isSameSign(int x, int y) /有0的情况例外return (x y) = 0; / true 表示 x和y有相同的符号, false表示x,y有相反的符号。14.计算2的n次方cpp view plaincopyprint?1. intgetFactorialofTwo(intn)/n02. return2 0return 2 0?(n&(n-1)=0:false;3. /*如果是2的幂,n一定是100.n-1就是1111.4. 所以做与运算结果为0*/5. boolean isFactorialofTwo(int n)return n 0 ? (n & (n - 1) = 0 : false;/*如果是2的幂,n一定是100. n-1就是1111. 所以做与运算结果为0*/16.对2的n次方取余java view plaincopyprint?1. intquyu(intm,intn)/n为2的次方2. returnm&(n-1);3. /*如果是2的幂,n一定是100.n-1就是1111.4. 所以做与运算结果保留m在n范围的非0的位*/5. int quyu(int m,int n)/n为2的次方return m & (n - 1);/*如果是2的幂,n一定是100. n-1就是1111. 所以做与运算结果保留m在n范围的非0的位*/17.求两个整数的平均值java view plaincopyprint?1. intgetAverage(intx,inty)2. return(x+y)1;3. int getAverage(int x, int y) return (x + y) 1;另一种写法java view plaincopyprint?1. intgetAverage(intx,inty)2. return(xy)1)+(x&y);3. /*(xy)1得到x,y其中一个为1的位并除以2,4. x&y得到x,y都为1的部分,加一起就是平均数了*/5. 6. int getAverage(int x, int y) return (x y) 1) + (x & y); /*(xy) 1得到x,y其中一个为1的位并除以2, x&y得到x,y都为1的部分,加一起就是平均数了*/ 下面是三个最基本对二进制位的操作18.从低位到高位,取n的第m位java view plaincopyprint?1. intgetBit(intn,intm)2. return(n(m-1)&1;3. int getBit(int n, int m)return (n (m-1) & 1;19.从低位到高位.将n的第m位置1java view plaincopyprint?1. intsetBitToOne(intn,intm)2. returnn|(1(m-1);3. /*将1左移m-1位找到第m位,得到000.1.0004. n在和这个数做或运算*/5. int setBitToOne(int n, int m)return n | (1 (m-1);/*将1左移m-1位找到第m位,得到000.1.000 n在和这个数做或运算*/20.从低位到高位,将n的第m位置0java view plaincop

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论