位运算与两值互换的几种方法
一、位运算
&按位与 |按位或 ^按位异或 ~按位取反
<<按位左位移 >>按位右位移 >>>按位右位移(无符号)
eg:
3&5=?
~6 = ?
算法:
1.将3和5转换成二进制表示形式
2.竖着按照对应的位置进行&|^计算
3.将计算后的二进制结果转化为十进制
将二进制每三个合并为一个-------》八进制
将二进制每四个合并为一个--------》十六进制
知识补充
原码 反码 补码 二进制表示数字
6 | -6
原码:00000000 00000000 00000000 00000110 | 10000000 00000000 00000000 00000110
反码:00000000 00000000 00000000 00000110 | 11111111 11111111 11111111 11111001 符号不动其余取反
补码:00000000 00000000 00000000 00000110 | 11111111 11111111 11111111 11111010 反码后加1
计算机中不管是整数还是负数 储存的形式都是以补码形式来储存
注意 反码是一种表示形式 取反是一个计算过程(每一个位置都取反)
6<<2 = 24
00000000 00000000 00000000 00000110
000000 00000000 00000000 0000011000
6>>1=3
00000000 00000000 00000000 00000110
000000000 00000000 00000000 0000011
-6>>>1=3
11111111 11111111 11111111 11111010
?11111111 11111111 11111111 1111101 //问号处填什么,下面给出答案
说明:
>>保留1填1
>>>不保留全填0
二、两值互换的几种方法
a与b值互换的三种方法
1.新变量 第三方
int c;
c=a;
a=b;
b=c;
2.求和
a=a+b;
b=a-b;
a=a-b;
3.异或
a=a^b // eg: a=1;b=2 a^b----> 001 ---->011=3
// 010
b=a^b
a=a^b;