位运算

 位运算符和位运算
运算符  含义
&    按位与
|    按位或
^    按位异或
~    取反
<<   左移
>>   右移
按位与运算符 &
  参加运算的两个数制,按二进制进行 与运算。如果两个相应的二进位数为1,刚该位的结果为 1 否则为 0 即:
  0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1& 1 = 1
例如:3 & 5 并不等于5,应该是按位与
3 = 00000011
5 = 00000101 &
      00000001
  因此 3 & 5 的值得 1, 如果参加 & 是负数(-3 & -5),则以补码形式表示为二进制数。然后按位进行 与 运算。
 按位或运算符 |
  两个相应的二进位中只要有一个为 1,该位的结果就为 1。
0|0=0; 0|1=1; 1|0=1; 1|1=1;
  按位或运算常用来对一个数据的某些位定值为1,如 a 是一个整数(16位)有表达式 a & 0377,则低 8 位全置为 1。高 8 位保留原样。
 异或运算符 ^
  异或运算符 ^ 也称 XOR 运算符。它的规则是若参加运算的两个二进位同号,则结果为0,异号则为1。即 0^0=0; 0^1=1; 1^0=1;1^1=0;
  假如 a = 3, b = 4。想将 a 和 b 的值互换,可以用以下赋值语句实现:
  a = a ^ b;
  b = b ^ a;
  a = a ^ b;
取反运算符 ~
  ~是一个头单目运算符,用来对一个二进制按位取反,即将 0 变 1,1变 0。例如~25 是对八进制数 25 (即 00010101)按位取反。
00000000 00010101
11111111 11101010 ~
  ~运算符的优先级别比算术运算符,关系运算符,逻辑运算符和其它运算符都高,例如:~a & b,先进行 ~a 然后进行 & 运算。
 左移运算符 <<
  用来将一个数各二进位全部左移若干位。例如:
  a = a << 2;
将 a 的二进制数左移 2 位,右补 0,若 a = 15,即二进制数 00001111,左移2位得到 00111100,即十进制数60.
  高位左移后溢出,舍弃不起作用。
  左移一位相当于该数乘以2。但些结论只适用于该数左移时被溢出舍弃的高位中不包含1 的情况。
  左移比乘法运算快得多,有些C编译程序自动将乘2的运算用左移来实现。
 右移运算符 >>
  a >> 2 表示将 a 的各二进位右移 2 位。移到右端的低位被舍弃,对无符号数,高位补 0。如 a = 017 时:
a = 00001111 >> 2
00000011
  右移一位相当于除以 2 ,右移 n 位相当于除于 2^n。
  在右移时,需要注意符号位问题。对无符号数,右移时左边高位移入 0。对于有符号的值,如果原来符号位为 0 (该数为正),则左边也是移入 0,如果上例表示的那样,如果符号位原来为 1(该数为负),则左边移入的 0 还是 1 ,要取决于所用的计算机系统。移入 0 称为 逻辑右移,即简单右移。移入 1 称为 算术右移。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值