• C语言和指针-回顾07-算数移位和逻辑移位


    逻辑移位:不关注符号位(最高位),每个bit向左或者向右移位,最高位或者最低位由0补齐。

    算数移位:关注符号位(最高位)。

    算数左移:跟逻辑左移一样,每个bit向左移位,低位由0补齐。

    算数右移:符号位(最高位)保持不变,每个bit向右移位,次高位由符号位补齐。

     

    例子 1:逻辑移位和算数移位都一样的结果

    十进制 34 :34 /16 = 2余2:十六进制 0x22:二进制 0010,0010

    左移:二进制 0100,0100:十六进制 0x44:十进制 68

    右移:二进制 0001,0001:十六进制 0x11:十进制 17

     

    例子 2:算数移位

    十进制 -34 :0010,0010取反后+1:二进制 1101,1110:十六进制 0xDE

    左移:二进制 1011,1100:十六进制 0xBC:十进制 -68(减1后:1011,1011,取反后:0100,0100,0x44:68)

    右移:二进制 1110,1111:十六进制 0xEF:十进制 -17(减1后:1110,1110,取反后:0001,0001,0x11:17)

     

    从上面的两个例子看,算数移位和逻辑移位就是把某一个数字除2或者乘2。

    但是需要注意这个结论的前提条件是不超过取值范围。

    比如:signed char,取值范围是-128 ~ 127。

    负数:1000,0000 ~ 1111,1111(-128 ~ -1),正数:0000,0000 ~ 0111,1111(1 ~ 127)

    如果-34左移2位会怎样?是-34 * 2 * 2 = -136吗?不对的,因为-136已经超出了signed char取值范围了。

    -34左移2位后:0111,1000。符号位都变了,变成了正数。十进制值:120(十六进制0x78)

     

  • 相关阅读:
    递归 深拷贝
    js 基础复习(0)
    js数组冒泡排序,快速排序的原理以及实现
    .sass 和 .scss 区别
    ionic2-从搭建环境说起
    Unity3d截图保存到Android相册的实现
    总是要总结一年的工作(写给自己和想要从技术创业开公司的朋友们)
    初入职场(插曲-如何更称职的工作)
    初入职场(插曲-你的成长代价)
    初入职场(面试)
  • 原文地址:https://www.cnblogs.com/wuyuntana/p/14956927.html
Copyright © 2020-2023  润新知