zoukankan      html  css  js  c++  java
  • 六种常用位操作运算符原理及用途

    “&”---------按位与运算符

    “|”----------按位或运算符

    “^”---------按位异或运算符

    “~”---------取反运算符

    “>>”-------数据右移

    “<<”-------数据左移

    按位&运算

    原理:仅当两个位操作数都为1,输出结果才为1,否则都输出为0。

    例如二进制1010001,十进制81即a数;二进制1011000,十进制88即b数;

    81&88等于

    1010001

    &

    1011000

    ————————

    1010000     

    按&运算的用途:能够屏蔽某bits(位),例如:需要屏蔽第三位数,则将一个数例如b数二进制1011000,b数1011000 &上 1110111  ;

    则:

    1011000             b数

    &

    1110111

    ——————

    1010000------->由此可见b数的1011000 的第三位已经值0了

    ——————————————————————————————————————————————————————————————————————————————————————————————

    按位|运算

    原理:仅当两个位操作数都为0,输出结果才为0,否则都输出为1。

    例如二进制1010001,十进制81即a数;二进制1011000,十进制88即b数;

    81&88等于

    1010001

    |

    1011000

    ————————

    1011001    

    |或按位运算符的用途:

    例如我们想将b数中的第0位和第1位的数都置1,所以我们可以

    1011000       b数

    |

    0000011

    ——————

    1011011---------->由此可见这个数的第0位和第1位已经置1

    ————————————————————————————————————————————————————————————

    按位异或^运算

    原理:仅当两个位操作数不同时,输出结果才为1,否则都输出为0。

    例如二进制1010001,十进制81即a数;二进制1011000,十进制88即b数;

    81&88等于

    1010001

    ^

    1011000

    ————————

    0001001 --------->由此可见, 两个数的第0位和第3位都不同,所以异或后变成1,其余的都为0

    ^异或按位运算符的用途:

    1、按位异或运算可以使特定的位取反

    例如我们想将b数中的最高位和最低位取反,所以我们可以

    1011000       b数

    ^

    1000001

    ——————

    0011001---------->由此可见b数的最高位变成0和最低位已经置1,完成特定位取反

    2、直接交换两个变量的值

    a=3,b=4

    a   00000011

    b   00000100

    a  ^=b;得出 a = 00000111

    这是想b等于 00000011,只需要将b ^=a,这时b=00000011 也就是等于3;

    而想a等于00000100,只需要将a ^=b,,也就是a = 00000111^00000011 = 00000100,完成变量的交换

    ————————————————————————————————————————————————————————

    ~取反运算符

    取反运算符,顾名思义就是将每一位取反,也就是1变成0,0变成1;

    例如:

    ~10000011 等于 01111100

    ——————————————————————————————————————————————————————

    >>数据右移

    将变量的各位按要求向右移动若干位,例如

    a = 1111 1111 0000 0000 >>8

    则a = 0000 0000 1111 1111

    ——————————————————————————————————————————————————————

    >>数据左移

    将变量的各位按要求向右移动若干位,例如

    a = 1111 1111 0000 0000  <<8

    则a = 0000 0000 0000 0000 

    注意:无论左移还是右移,当某位从一端移出时,另一端出现的空白将用0来补充,移去的位永远消失

    用途:
    移位操作可用于整数的快速乘除运算,左移一位等效于乘2,而右移一位等效于除以2。

    如:x=7,二进制表达为:00000111,

    x<<1    00001110,相当于:x=2*7=14,

    x<<3    01110000,相当于:x=14*2*2*2=112

    x<<2    11000000,x=192

    在作第三次左移时,其中一位为1的位移到外面去了,而左边只能以0补齐,因而便不等于112*2*2=448,而是等于192了。当x按刚才的步骤反向移动回去时,就不能返回到原来的值了,因为左边丢掉的一个1,再也不能找回来了。

    右移做除法,如:

    x>>2    00110000    x=48

    x>>3    00000110    x=48/8=6

    x>>1    00000011    x=6/2=3

  • 相关阅读:
    (转)【经验之谈】Git使用之Windows环境下配置
    (转)SQL Server内存遭遇操作系统进程压榨案例
    (转)【javascript基础】原型与原型链
    (转)微信公众平台开发教程目录
    (转)C# .net微信开发,开发认证,关注触发消息,自动应答,事件响应,自定义菜单
    (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
    (转)微信公众平台开发教程(七)Session处理
    多线程入门-创建线程
    MySQL数据库优化
    图解:从单个服务器扩展到百万用户的系统
  • 原文地址:https://www.cnblogs.com/xqc123/p/12357345.html
Copyright © 2011-2022 走看看