位运算小练习

问题1:判断一个整数n,是否是2的幂
        
         分析:正整数n如果是2的幂,则n的其二进制仅包含一个1

        例如: 8br/>
        整数2的二进制:10

        整数4的二进制:100

        整数8的二进制:1000

        整数16的二进制:10000

        实现思路:整数n如果为2的n次幂,二进制形式必为10、100、 1000

        则n-1的计算结果,转换为二进制形式为01、011、0111、 01111

        两者进行与运算,结果必为0
         

代码实现: 

int n = 63;
String ret = (n&(n-1))==0?"是":"不是";
System.out.printf("整数%d%s2的幂\n",n,ret);

问题2:判断一个整数n,是否是4的幂
        分析:如果n是4的幂,那么n一定也是2的幂。
        所以,先判断n是否是2的幂
        然后,再判断n是否是4的幂
        如果n是4的幂,则n的二进制仅包含-一个1, 并且一定在偶数位(低位从0开始计算)
        例如:
        整数4的二进制:100
        整数16的二进制:10000
        整数64的二进制:1000000
        整数256的二进制:00000000
        实现思路:
        定义一个整数mask,二进制的偶数位均为0,奇数位均为1
        二进制: 10101010101010101010101010101010
        十六进制:0xaaaaaaaa
        整数mask与n进行&与运算,如果1出现在偶数位,则计算结果为0

代码实现:

int n1 = 64;
int mask = 0b10101010;
String ret1 = (n1&(n1-1))==0&&(n1&mask)==0?"是":"不是";
System.out.printf("整数%d%s4的幂\n",n1,ret1);

 问题3:有5个整数,仅有1个整数出现过1次,其余均出现2次,请找出这个整数。
        分析:
            两个相同整数进行^异或运算,结果为0;.
            任何整数与0进行^异或运算,结果为整数本身
            实现思路:
            将5个整数累计异或,最终结果为仅出现1次的整数

代码实现:

int a = 5,b = 2,c = 5,d = 2,e = 3;
int ret2 = a^b^c^d^e;
System.out.println(ret2);

 //调整百位、十位、个位的数字,让调整的数字更大

代码实现: 

int n2 = 123;
int x = n2/100;
int y = n2%100/10;
int z = n2%10;
		
int max = x>y&&x>z?x:(y>z?y:z);
int min = x

你可能感兴趣的:(java,算法)