A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小年轻不见了 中级黑马   /  2015-6-23 21:33  /  561 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

位运算是针对二进制的运算

& 按位与    &&逻辑与
| 按位或    ||逻辑或
^ 按位异或

<< 左移
>> 右移
~ 取反

  1.  & 按位与
    特点:只有对应的两位都是1返回1 否则返回0
    口诀:一假则假
    int result = 9 & 5;
    printf("result = %d\n", result);

    1001
  & 0101
-----------
    0001


  2.| 按位或
    特点:只要对应的两位,其中一位是1就反回1
    口诀:一真则真

   int result = 9 | 5;
    printf("result = %d\n", result);
    1001
  | 0101
-----------
    1101


  3.  ^ 按位异或
    特点:对应的两位不相同就反回1,相同就返回0(相同为0,不同为1)
int result = 9 ^ 5;
    printf("result = %d\n", result);

    1001
  ^ 0101
-----------
    1100

    按位异或规律
  3.2相同的整数按位异或的结果是0
int result3 = 9 ^ 9;
    1001
   ^1001
----------
    0000
3.3任何整数按位异或上0,结果不变,还是本身
   int result4 = 9 ^ 0;
    1001
   ^0000
  -------
    1001

3.4任何整数按位异或上另一个整数两次,结果还是本身
    第四个规律,可以通过2,3推理出来
   int result5 = 9 ^ 5 ^ 9;
    1001
  ^ 0101
-----------
    1100

    1100
   ^1001
  -------
    0101
    4. ~ 按位取反 :
        特点:0变1,1变0
    5. << 左移
    a << n 把整数a的二进制位往左移动n位 (a*2^n)
    特点:整体移动n后,多出来的位,直接砍掉,少的位数补0(高位砍掉,低位补0)
    注意:左移的时候,有可能改变数值的正负性
    左移的使用场景:当要计算某个数字乘以2的n次方的时候,用左移,效率最高
    6. >> 右移
    a >> n 把整数a的二进制位往右移动n位 符号位不变
    注意点:移除的位砍掉,缺少的一位,最高位是0就补0,是1就补1(当前操作系统下)
    右移的使用场景:当要计算某一个数除以2的N次方的时候,可以使用右移,效率最高
    int result8 = 9 >> 3;
    printf("result = %d\n", result8);







1 个回复

倒序浏览
同学,你是在水经验吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马