zoukankan      html  css  js  c++  java
  • 位移运算符

    https://blog.csdn.net/qq_39736982/article/details/82897647

    无符号位移(>>>、<<<)和有符号位移(>>、<<)

    关于数的移位,特别需要注意:

    1、正数,三码(源码、反码、补码)相同,所以无论左移还是右移都是补0.(左移则表示放大2的N次方,右移表示缩小2的N次方)

    2、负数的补码就需要注意,左移在右边补0,右移需要在左边补1

         有一个很有趣的误区是,认为符号位保持不变,仅仅移动数据位,这是不对的,因为无论数据位还是符号位,都是二进制,在整体大迁移的过程中,符号位也是要跟随潮流的。只不过,为了保证右移后,和原来的符号数一样,因此,负数在右移时左边补

    计算机表示数字正负不是用+ -加减号来表示,而是用最高位数字来表示,0表示正,1表示负

    1.有符号右移>>(若正数,高位补0,负数,高位补1)

    正数:例如4>>2

    首先写出4的二进制数,因为是正数所以最高位为0,也就是第一个

     0000 0100

    右移两位得到(高位补0)

     0000  0001

    结果为:1,右移n位也就是4/(2^n)

    负数:例如-4>>2(高位补1)

    首先写出-4的二进制数源码,因为是负数所以最高位为1   (负数的源码是负数的绝对值)

    1000 0100

    然后写出-4反码:保证符号位不变,其余位置取反

    1111 1011(反码)

    最后写出-4的补码:在反码的基础上加1

    1111 1100(补码)

    右移2位: 在高位补1

    1111 1111

    根据补码写出原码才是我们所求的结果, 保留符号位,然后减1取反       (或按位取反再加上1)

    1111 1110(减1的结果)

    1000 0001(取反的结果)

    结果为:-1

    2:无符号右移>>>(不论正负,高位均补0)  注意:无符号,所以都是当正数操作的

    正数:例如4>>>2

    与4>>2的运算相同,结果也为1

    负数:例如-4>>>2

    首先写出-4的二进制数,因为是负数所以最高位为1

    1000 0100

    然后写出-4补码:保证符号位不变,其余位置取反加1(从右往左遇到第一个1,然后剩下的全部取反就是了)

    1111 1100(补码)

    右移2位: 在高位补0

    0011 1111

    结果为:63

  • 相关阅读:
    java常用api
    常用命令
    mysql常用命令
    特性
    centos ubuntu 软件安装
    WebStorm创建Vue项目记录
    登录oracle官网下载资料账号可以使用(保存)(转)
    java学习之路—JDBC—DBUtils
    Linux从入门到精通(第4章--桌面环境)
    Linux从入门到精通(第2章--Linux安装)
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/11764347.html
Copyright © 2011-2022 走看看