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

来源:互联网 发布:windows微信机器人 编辑:程序博客网 时间:2024/06/05 08:36

位操作优点:

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

位操作基础:

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

这里写图片描述

位操作注意事项:

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); // 5System.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);// 5System.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
0 0
原创粉丝点击