位移运算

前提:下述的移位运算推理过程是建立在合理的移位运算基础上的,即移位运算的结果和实际运算结果一致

位移运算的数学意义

位移运算,相当于小数点的移动,对数值进行扩大或者缩小进制数倍
左移运算,小数点右移,扩大
右移运算,小数点左移,缩小

位移运算的规则

  1. 位移运算仅仅改变数值部分,符号位不变==(下述是有意义的位移运算)==
  2. 删除原则:右移,左添右省;左移,右添左省

  1. 0,0011010 作为正数,在可进行移位运算的前提下,最高位不为1,对于正数而言,1是有意义的数字,省去一,就省去了实际的数字。
  2. 对于-26的补码而言,1,1100110,由原码取补码的原则是:符号位不变,数值部分全部取反,末位加一。所以左边有意义的是0,无意义的是1;右边有意义的是1,无意义的是0。 所以对于补码而言,右移,左边添1;左移,右边添0

  1. 对于-26的反码1,1100101而言,由原码变成反码,是除符号位全部取反。所以对于数值部分,0表示1,1表示0。左移右边添1,右移左边添1

算术移位的硬件实现

  1. 正数原码,符号不变始终未0

    • 左移,右边添0,最高位省去
    • 右移,左边添0,该0可取自符号位的0,右边最低位省去
  2. 负数原码,符号不变始终未1

  • 左移,右边添0,最高位省去
  • 右移,左边添0,最低位省去
  1. 负数补码,符号不变始终未1
  • 左移,右边添0,最高位省去
  • 右移,左边添1,该1可取自符号位的1,右边最低位省去
  1. 负数反码,符号不变始终未1
  • 左移,右边添1,最高位省去
  • 右移,左边添1,该0可取自符号位的1,右边最低位省去
  1. 总结:根据上图可得,同样情况下丢1的意义不一样

算术移位和逻辑移位的区别

  1. 算术移位:计算机中的存储方式,最高位为符号位,除符号位仅仅移动数值位
  2. 逻辑移位:不存在符号位,所有的数都是数值部分,全部参与移位运算

定点运算——位移运算相关推荐

  1. java java.lang.Long详解之三 大显神通的位移运算

    2019独角兽企业重金招聘Python工程师标准>>> 文章看过后感觉受益匪浅,所以留下了以备温故:http://www.congmo.net/blog/2012/03/11/Lon ...

  2. java 乘法 位移_java 位移运算与乘法运算

    对于 JAVA 编程中,适当的采用位移运算,会减少代码的运行时间,提高项目的运行效率.这个可以从一道面试题说起: 问题: 用最有效率的方法算出2 乘以8 等於几?" 答案:2 << ...

  3. java 负数 位移运算_Java中的位移运算

    在Java中,位移运算属于基本运算,符号是<>,即向左位移和向右位移.在Java中只有整数才能位移,所以其他的不考虑,位移运算是将整数在内存中表示的二进制进行位移,所以在Java中分为正数 ...

  4. python中算术位移运算

    python中有一种位运算--算术位移运算,符号是<<或>>,算术位运算是基于补码的基础上进行的,正数的补码是正数本身,而负数的补码就比较复杂,先把写出正数的二进制,然后取反, ...

  5. java 乘法 位移_Java 使用位移运算实现乘法

    import java.util.Scanner; /** * @author Gaojie * @date 2018/7/23 10:15 * 程序开发中的乘法运算一般是通过 * 或 BigDeci ...

  6. 彻底弄清补码加减法运算,正数、负数位移运算原理

    前言 所有的运算都是补码运算. 正数的补码是其本身 负数补码的计算方式: 由原码到补码:原码除符号位以外全部取反得到反码,再加1得到补码.(取反区别于~按位取反运算符,按位取反运算符是包括符号位在内全 ...

  7. 位移运算(左移,右移)

    1.左移,当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,按余数进行位移.丢弃最高位,0补最低位.左移相当于乘,左移一位相当于乘2,左移两位相当于乘4,即左移位数乘于2 ...

  8. 【知识积累】位移运算(<<、>>、>>>)

    1.位移运算 原码 反码 = 原码取反 补码 = 反码 + 1 <<表示左移,不分正负数,低位补0; 方式一:补码左移几位,然后再转回原码 方式二:左移几位,乘以2的几次方 举例: 20 ...

  9. Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位

    Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位 一.概述 1.在浏览一篇文章时,看到一个介绍 ,使用位移操作替代乘除法 ,若位移多位该怎么计算呢?  二.代码理解 ...

最新文章

  1. 安装tensorflow-gpu==1.13.1成功案例
  2. JS验证框架的使用方法
  3. ELK 环境搭建1-Elasticsearch
  4. C++中成员函数和成员变量的隶属问题
  5. 前滴滴出行产品经理刘飞:写给产品经理的说明书(下)
  6. VTK:Rendering之HiddenLineRemoval
  7. 设计模式C++实现——组合模式
  8. centos 7 防火墙和端口配置
  9. 推荐关注这7个高质量的前端公众号
  10. dosbox 伪指令dd为什么会报错_什么是SQL函数?为什么使用SQL函数可能会带来问题?...
  11. vue 获取响应头里set-cookie的值_最简化 VUE的响应式原理
  12. OFDM系统MATLAB仿真
  13. 2、买卖股票的最佳时机 II
  14. Maven--Cargo远程部署
  15. 软考资料-软件设计师
  16. python怎么开服务器,实战讲解:如何用Python搭建一个服务器
  17. windows设置开机自动启动程序
  18. ANSI、C99、C11 标准区别详解
  19. Python关于numpy数组类型转换
  20. java结构体构建学生 学号_(1)定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩; 急求...

热门文章

  1. RHEL5下构建LAMP+Postfix+Dovecot+SquirrelMail+Extmail+Extman+DRBD
  2. Directx 3D - TL渲染流水线
  3. cal命令 – 显示日历
  4. 转载--开发端到端的 Ajax 应用程序,第 3 部分: 集成、测试和调试应用程序
  5. CSDN写博客教程--笔记
  6. Keras | 计算模型的FLOPs、MACCs
  7. Windows Server 2019安装.Net
  8. 韶关生物实验室建设平面布局
  9. NS版暗黑破坏神3金手指开发教程(15)
  10. 英语词汇学习----(卧室)