黑马程序员技术交流社区

标题: 位运算 位运算 [打印本页]

作者: flymanshow    时间: 2015-7-20 22:07
标题: 位运算 位运算
位运算
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。
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










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2