(电脑记事本写的,手机看格式可能有点混乱)
& 与运算 : 只有为双 1 时才 1
| 或运算 : 只要有一个(二个也可以)为 1 才为 1
~ 取反 : 二进制取反就行
^ 异或 : 只有互相不同时才为 1 , 相同时为 0
逻辑位运算:
&& : 前面为1 ,就return , 无法穿透
| | : 前面为0, 就return , 无法穿透
二进制:
正负数转换: 取反 再 加一
之所以用1 来表示负数,是因为这要计算机运算时只要遵循加法法则,不用逻辑转化,提高效率
四位数二进制有正负表示范围(-8~-1 和 0~7);
最小的分数没有相反数:
列:1000 -- 0111 -- 1000 (-8取相反数还是-8,由此可见一定位数的最小的负数没有相数)
>> 左移 : 二进制数全左移,负数高位补1,正数高位补0 (非负数相当于 /2)
<< 右移 : 而进制数全右移,(非负数相当于 *2)
>>> 逻辑右移 : 二进制全右移,(高位只补0)
位运算的应用:
一个数转换为二进制数算法(python)
for i in range(0,num): # 十进制数位数(列如int 是 32 位)
nums = num & (1<<i) # 也可以模2,但相较于位运算时间花费较多
print(1 if nums==0 else 1)
为什么判断 nums等于0 或不等于0,而不是 是否等于1 呢?
因为与运算是对整体数进行运算,不是对单独数位进行判断,且 1 其实是表示 2^0 , 对整体也可以能为2^2等 {2^i | i = 0,1,2,3,4,5……n}
所以nums==0 是一分支,而1是另一分支的一部分,这样判断情况少且好写