Java笔试题分类总结--位操作

位操作优点:

在计算机中所有数据都是以二进制的形式储存的。
位运算其实就是直接对在内存中的二进制数据进行操作,因此处理数据的速度非常快。

位操作基础:

基本的位操作符有"与""或""异或""取反""左移""右移"6种,
它们的运算规则如下所示:

Java笔试题分类总结--位操作_第1张图片

位操作注意事项:

1) 在这6种操作符中,只有"~取反"是单目操作符,其它5种都是双目操作符。

2) 位操作只能用于整形数据,对floatdouble类型进行位操作会被编译器报错。

3) 位操作符的运算优先级比较低,所以尽量使用括号来确保运算顺序。

4) 位操作还有一些复合操作符,如"&=""|=""^="、<<="、">>="。

下边介绍一些在笔试面试中,经常遇到的问题。

1. &和&&的区别

1) &和&&都可以用作逻辑运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,
   否则,只要有一方为false,则结果为false2) &&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。

3) &可以用作位运算,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

2. 不用中间变量交换 a,b的值(有多种方法,这里只介绍异或法)

int a=3, b=5;

a ^= b;
b ^= a;
a ^= b;

System.out.println(a); // 5
System.out.println(b); // 3

3. 判断一个数是基数还是偶数

// 将数值与1做按位与操作,如果结果是1则为基数,为0则为偶数
for(int i=0; i<100; i++){
    if((i & 1) == 1){
        System.out.println(i+"是基数");
    }else{
        System.out.println(i+"是偶数");
    }
}

4. 求一个数的绝对值

int a = 5, b = -8;

int a_abs = (a ^ (a >> 31)) - (a >> 31); // 计算a的绝对值
int b_abs = (b ^ (b >> 31)) - (b >> 31); // 计算b的绝对值

System.out.println(a_abs);// 5
System.out.println(b_abs);// 8

5. 用最有效率的方法算出4乘以17等于多少

System.out.println(17 << 2); // 右移两位,相当于乘以4

6. 判断一个数n是不是2的幂

int n = 1024;

if((n & (n - 1)) == 0){
    System.out.println(n + "是2的幂");
}else{
    System.out.println(n + "不是2的幂");
}

7. 如果a大于0并小于65536,用移位法计算a乘以254的值

int a = 65530;

int res = (a << 8) -(a << 1); // 移位运算的优先级比较低,需要加括号

System.out.println(res); // 16644620

你可能感兴趣的:(JAVA)