位运算
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。
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
|
|