版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27717921/article/details/78158628
之前就和同学讨论过几道位运算的题目,觉得挺有意思的,就记录一波。 这样坐着敲字总让我想起在出租房里百无聊赖的日子、 题目一: single number 问题 整型数组中只有一个整数只出现了一次,其他整数都出现了两次,找出出现一次的这个整数,并返回。 异或运算 利用异或运算整型数自身与自身异或为0的特点。
int singleNum(int[] arr){
int res = arr[0];
for(int i=1;i<arr.length;i++){
res=res^arr[i];
}
return res;
}
题目二:一个十进制数的二进制形式中1的个数 与运算 利用与运算0&1=0,不断将一个非零数不断将二进制形式中的1置于0
int get_one_num(int n){
int res = 0;
while(n){
n = n&(n-1);
res++;
}
return res;
}
题目三:判断一个数是否为2的幂,比如1=2^0,2=2^1,4=2^2 与运算 利用与运算中,2&1=0,4&3=0,利用2的幂-1与2的幂的与运算结果为0,2的幂的二进制形式一定只有一位为1,其他为0,而他的减一形式一定是这一位为0,其他为1.
boolean istwores(int n){
return n&(n-1)==0?True:False;
}
题目四 判断一个数是否为4的幂,4^0=1,4^1=4,4^2=16 4^n=2^(2n) 则如果数是4的幂,那么首先一定是2的幂,并且2n必然取值只有0,2,4,等偶数形式
boolean isfourres(int n){
return n&&(n-1)==0&&n&(0x55555555)?True:False;
}
题目五 判断一个数是否为3的幂,3^0=1,3^1=3,3^2=9 如果一个数是3的幂,那么它具有它的所有约数也都是3的幂的形式,比如,3^2=9,9的约数有1,3,9,都是3的幂的形式。 所以我们的思路是找到整型最大范围内是3的幂形式的那个数,这个数记作为maxNum 要判断n是否是3的幂的形式,那么只需要看maxNum%n==0?True:False; int maxNum = (int) Math.pow(3,(int)(Math.log(0x7fffffff)/Math.log(3))); OK,国庆快乐。