计算机中负数的表示,是以补码的形式呈现的
- 原码
- 反码:^
- 正数:反码与源码相同
- 负数:将原码除符号位全部取反(将0变成1,1变成0)
- 补码:
- 正数:与原码相同
- 负数:在反码的基础上+1(或者负数的补码,就用其正数,减一取反,就成可了。)
常见的位运算
按位与 & (1&1=1 0&0=0 1&0=0)
按位或 | (1|1=1 0|0=0 1|0=1)
按位非 ~ (~1=0 ~0=1)
按位异或 ^ (1^1=0 1^0=1 0^0=0,任何一个数和自己异或结果一定是0,任何一个数与0异或结果为本身)
有符号右移 >> (符号位不变,其他位移动。若正数,高位补0,负数,高位补1)
有符号左移 <<
无符号右移 >>> (不论正负,高位均补0)
简单的面试题
- 取模:a%(2n)可以看作a&2n-1
- 判断奇偶数:要判断的数&1,结果为1则为奇数,为0则为偶数
- 实现数字翻倍或减半:有符号左移右移
- 交换两数
(1) 通常是引入一个临时变量temp
(2)不借助临时变量 a=a+b b=a-b a=a-b
(3)a=a^b b=a^b a=a^b
相关刷题:
力扣136只出现一次的数字
力扣338比特位计数
力扣461汉明距离
剑指offerJZ15二进制中1的个数(考虑正负数)