这个题目主要看你能不能想到用“&”这个位运算符,想到了就很简单,没想到就要走很多弯路,直接上代码
public static void way1(int n) {
int temp = n & (Integer.MAX_VALUE - 255);
System.out.println(temp);
}
代码思路:一个int型整数换成二进制表示有32位,怎么简便的达到题目要求,这时候就要用到“&”位运算符
&的作用:1&1=1,1&0=0, 0&1=0, 0&0=0
低吗中用到Integer.MAX_VALUE - 255与传入的int数做&运算,是因为
Integer.MAX_VALUE的二进制为:1111 1111 1111 1111 1111 1111 1111 1111(ps:也就是32个1)
255的二进制为:1111 1111 (ps:也就是8个1)
Integer.MAX_VALUE - 255:1111 1111 1111 1111 1111 1111 0000 0000
让n与Integer.MAX_VALUE - 255做&运算,Integer.MAX_VALUE - 255的后8位都是0,所以无论n的后8 位是1或0,与Integer.MAX_VALUE - 255做&运算都是0,就达到了题目清楚后8位的目的,并且Integer.MAX_VALUE - 255的前24位都为1,与n做&运算,n的数位上本来是1做了&运算还是1,是0的还是0,不会对其产生影响,达到了高24位不变的目的。(理解并运用&运算解题)