• 位运算


     

    位运算

    首先

    要明白位运算是在二进制中的运算方式,所有其他进制的数在进行位运算时都要先转化成二进制数再进行运算。
    位运算主要包括按位与(&)、按位或(|)、按位异或(^)、取反( ~ )、左移(<<)、右移(>>)这几种。
    其中除了取反( ~ )以外,其他的都是二目运算符,即要求运算符左右两侧均有一个运算量。

    补码

    补码是为了表示一个负数的二进制形式。
    其转化方式是先将负数当成正数转化成二进制的形式再将二进制正数的各个位上取反再加上一。

    例如-5
    先求出5的二进制数 : 0000 0000 0101
    然后将各个位上0变1,1变0 : 1111 1111 1010
    最后再加1 : 1111 1111 1011
    这里5二进制下是101表示时前面全是0,这里省略就只写了几个意思一下^ _ ^

    按位与(&)

    运算的两个数,转换算为二进制后,进行与(&)运算。
    当相应位上的数都是1时,该位取1,否则该为0。

    例如5 & -5
    5 : 0000 0000 0101
    -5 :1111 1111 1011
    答案 : 0000 0000 0001

    按位或(|)

    运算的两个数,转换为二进制后,进行或(|)运算。
    只要相应位上存在1,那么该位就取1,如果都不为1,就为0。

    还是5 | -5
    0000 0000 0101
    1111 1111 1011
    可以看到每一位中其中一个都有1
    答案 :1111 1111 1111

    按位异或(^)

    运算的两个数,转换成二进制数后,进行异或(^)运算
    如果相应位置上的数相同,该位取0,如果不同改位取1。

    5 ^ -5
    0000 0000 0101
    1111 1111 1011
    答案: 1111 1111 1110

    同时任何数异或0都是其本身,一个数如果异或自己则等于0
    这样我们可以用异或来交换两个数的值

    比如交换x,y的值
    x ^= y; x = x ^ y
    y ^= x; y = y ^ x ^ y
    x ^= y; x = ( x ^ y ) ^ (y ^ x ^ y) ; --------- //最后一步 x ^= y 时 x = x ^ y; y = y ^ x ^ y

    左移(<<)

    将一个数二进制下的数向左移若干位,
    比如 x << y 就是将二进制下的x 向左移 y 位

    例 : 5 << 5
    5 : 0000 0000 0101
    5 << 5 : 0000 1010 0000
    在10进制下就等于160

    我们可以思考一下,在十进制中,一个数每乘一次10就向左进一位。
    那么在二进制中,同10进制一样,二进制中每乘一次2就向左进一位,
    那么一个数左移x 就等价于一个数乘 2x

    右移(>>)

    将一个数在二进制下右移若干位
    与左移用法相同

    例 5 << 2
    5:0000 0000 0101
    5 << 2 : 0000 0000 0001
    十进制下等于1

    这里与左移类似,十进制下每除10整数位就退一位
    那么右移就等价于除了几次2
    同时右移运算是向下取整

    取反(~)

    其实在说补码的是后,取反就已经说了,就是将取反的数在二进制下的每一位取相反的数

    5 : 0000 0000 0101
    ~5 : 1111 1111 1010


    版权声明:本文为博主(BIGBIGPPT)原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    本文链接:https://blog.csdn.net/BIGBIGPPT/article/details/88919783
    满堂花醉三千客,一剑霜寒十四州
  • 相关阅读:
    [GO]使用bufio的文件读取方式
    php开发工程师面必问题
    一位资深php程序员在北京的面试30个题目
    GIT 分支管理:创建与合并分支、解决合并冲突
    linux下挂在u盘,移动硬盘的方法,转移服务器资料的时候,使用移动硬盘什么最方便了
    php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能
    navicat 官方使用手册,中文版,快捷键大全
    Memcached之缓存雪崩,缓存穿透,缓存预热,缓存算法
    Memcache 笔记(2)
    Memcache笔记(1)
  • 原文地址:https://www.cnblogs.com/phemiku/p/11421813.html
Copyright © 2020-2023  润新知