在位运算之前,对二进制需要掌握的基础知识
正数的二进制,例如 5
原码是 0000 0000 0000 0000 0101
负数的二进制,例如 -5
负数的原码是在最高位补1 :1000 0000 0000 0101
在计算机中,负数以原码的补码形式表达。
反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
则负数的反码,例如 -5 是:1111 1111 111 1010
那么补码为:正数的补码和原码相同,负数的补码为对该数的原码出符号为外,各位取反,然后再最后一位加1.
比如 -5 (16位)
原码为:1000 0000 0000 0101
反码为:1111 1111 1111 1010
补码为:1111 1111 1111 1011
主要知识点:
正数的反码和补码都与原码相同
而负数的反码为对该数的原码除符号位外各位取反
负数的补码为对该数的原码除符号位外各位取反,然后再最后一位加1
5: 1111 1111 1111 1011
-5: 0000 0000 0000 0101
5 &(-5): 0000 0000 0000 0001
所以 5 & (-5) 得到最低位的1
5: 1111 1111 1111 1011
~5: 0000 0000 0000 0100
5&(~5) 0000 0000 0000 0000
所以 5&(~5) = 0
位运算
XOR 异或
异或:相同为0,不同为1,也可以用 ‘不进位加法’来理解
异或的操作特点:
1、x ^ 0 = x
2、x ^ 1s = ~x //注意1s =~0 1s是全部都是1 ,就是0取反
3、x ^ (~x) = 1s 例如: 1100 0011 = 1111
4、x ^ x = 0
5、c = a ^ b => a ^ c =b,b ^ c =a //交换2个数
6、a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
实战要点:
判断奇偶:
-
x % 2 == 1 ---> (x & 1) == 1 //判断奇数
x % 2 == 0 ---> (x & 1) == 0 //判断偶数
-
x >> 1 ——> x / 2
即:x = x/2 ; -> x = x >> 1;
mid = (left + right) / 2 --> mid = (left + right) >> 1
-
x = x & (x-1)清零最低位的1
例如:2的二进制是 10 (x - 1) = 01 => 00
-
x & -x => 得到最低位的1
-
x & ~x => 0
网友评论