1.1 课程介绍_哔哩哔哩_bilibili
&与 |或 ^异或 ~非
>>右移 <<左移
>>>0填充高位 >>符号位填充高位
用法:判断奇偶数 x&1 获取二进制位 交换两个整数的值 求绝对值
题1-1:如何找出数组中唯一成对的数
public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = new int[1001];for(int i=0;i<1001;i++) {nums[i] = i;}nums[0]=179;int res = 0;for(int i=0;i<1001;i++) {res = res^nums[i];res = res^i;}System.out.println(res);}
题1-2:找出落单的数
public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = {1,1,3,3,7,7,9,9,5};int res = 0;for(int i=0;i<nums.length;i++) {res = res ^ nums[i];}System.out.println(res);}
题1-3:二进制中1的个数
解1:比对最后一位 右移
public static void main(String[] args) {// TODO Auto-generated method stubint num = 9;int cnt = 0;for(int i=0;i<32;i++) {if((num&1)==1) cnt++;num = num >> 1;}System.out.println(cnt);}
解2:x^(x-1) 去掉最低位的1
public static void main(String[] args) {// TODO Auto-generated method stubint num = 9;int cnt = 0;while(num>0) {num = num & (num-1);cnt++;}System.out.println(cnt);}
题1-4:是不是2的整数次方
n&(n-1) 去掉最后一个二进制位的1
public static void main(String[] args) {// TODO Auto-generated method stubint num = 64;if(((num-1)&num)==0) {System.out.println("true");}else {System.out.println("false");}}