算法很美(蓝桥) | 位运算的奇技淫巧

时间:2021-04-20 15:43:24   收藏:0   阅读:0

前言

在学习算法很美课程的时候,学习到了一些位运算的奇技淫巧,收录在此

判断奇偶数

判断奇数1 & x == 1

System.out.println((1991 & 1) == 1);

判断偶数1 & x == 0

System.out.println((1990 & 1) == 0);

获取二进制数x位y是1还是0

将x右移y - 1位,与1

int x = 0b010110010;
int y = 5;
int res = (x >> (y - 1)) & 1;
System.out.println(res);

交换两个整数变量的值

不用判断语句,求整数的绝对值

异或,可以理解为不进位加法,1 + 1 = 0,0 + 0 = 0,1 + 0 = 1

异或的性质

int a = -100;
// a为正数,a >> 31 = 00000000 00000000 00000000 00000000,求绝对值就是自己
// a为负数,a >> 31 = 11111111 11111111 11111111 11111111,求绝对值就是自己 * -1(00000000 00000000 00000000 00000001)
System.out.println((a + (a >> 31) ^ (a >> 31)));

这边课程讲的不是很明白,可以参考下位运算求整数的绝对值,写的很好。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!