二进制 | 十进制 |
---|---|
10 | 2 |
100 | 4 |
1000 | 8 |
10000 | 16 |
100000 | 32 |
二进制 | 十进制 |
---|---|
11 | 3 |
110 | 6 |
1100 | 12 |
11000 | 24 |
110000 | 48 |
判断偶数奇数
X & 1 = 1
//奇数
X & 1 = 0
//偶数
不适用第三个数,交换两个数
X = X ^ Y , Y = X ^ Y , X = X ^ Y
运算符&(可以用来获取进位)
15 & 8 = 8
先把15和8转换成二进制
15 = 1111 , 8 = 1000
结果为:1000
运算符^ (‘异或’ 无进位加法)
15 ^ 9 = 7
7 = 111
试炼题(在不使用运算符 + 和 - 计算两个整数a , b之和 )
while(b != 0){
int temp = a ^ b;
b = (a & b) << 1;
a = temp;
}
试炼题(给定一个整数,判断是否是2的幂次方)
实例1 实例2 实例3
输入:1
输入:16
输入:218
输出:true
输出:true
输出:false
解释:2的0次方 = 1
解释:2的4次方 = 16
return n > 0 && n&(n-1) == 0
8:001000
7:000111
8&7:000000
试炼题(写一个无符号整数,返回这个数二进制中的1的数量)
从1开始移动掩码与目标值进行 & 值不是0就是有1
int result = 0;
int mark = 1;
for(int i = 0;i < 32;i++){
if((n & mark) != 0){
result++;
}
mark = mark << 1;
}
比如快排,二分,归并等,记住常见排序算法时间复杂度