| 
 
| //-----------------------位运算 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。
 C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char,short,int与long类型。
 
 1)& 按位与   口诀: 同1为1,有0为0
 只有对应的两个二进位均为1时,结果位才为1,否则为0
 
 
 2) | 按位或    口诀:有1则1
 只要对应的二个二进位有一个为1时,结果位就为1,否则为0
 
 3) ^ 按位异或  口诀:同0非1
 当对应的二进位相异(不相同)时,结果为1,否则为0
 
 4)~ 取反
 各二进位进行取反(0变1,1变0)
 
 以上都是在二进制进行运算
 
 
 
 
 1)<<  左移
 
 1、各二进位全部左移n位,高位丢弃,低位补0
 
 1)左移可能会改变一个数的正负性
 
 2)左移1位相当于*2^n
 
 举例:快速计算一个数乘以2的n次方
 (8<<3 等同于8*2^3)
 
 
 2)>> 右移
 各二进位全部右移n位,保持符号位不变
 x >> n
 x的所有二进制位向右移动n位,移出的位删掉,移进的位补符号位
 
 1、右移不会改变一个数的符号
 2  右移 n 位就相当于/2^n
 用途:快速计算一个数除以2的n次方 (8>>3 等同于8/2^3)
 
 技巧:
 1)任何数和1进行&操作,得到这个数的最低位
 2)想把某一位置0,就让它某一位置与0进行&运算
 
 
 
 理解:
 1)编程实现10进制转2进制
 // 每次取 一个数的最后一个二进制位  >>(31-i)
 // 任何一个数和1进行&(按位与)得到任何一个数的二进制的最后一位
 第一次取出符号位
 
 
 a&1  -->  1  奇数
 -->  0  偶数
 
 
 
 1)数学方法:
 a = b - a;
 b = b - a;
 a = b + a;
 
 2)
 int temp = 0,a = 1,b = -1;
 
 temp = a;
 
 a = b;
 
 b = temp;
 
 
 
 3)实现两个变量值交换
 
 a = a^b;
 b = a^b; -->  a^b^b; --> a
 a = a^b;-->   a^b^a; --> b
 
 1001   a
 ^ 1101   b
 ----------------------
 0100
 ^ 1101   b
 -----------------------
 1001
 
 
 | 
 |