一、移位运算

1.移位的意义

移位运算在日常生活中常见。例如15米可写作1500厘米,单就数字而言,1500相当于小数点左移了两位,并在小数点前面添了两个0;同样15也相当于1500相对于小数点右移了两位,并删去了小数点后面的两个0。可见,当某个十进制数相对于小数点左移n位时,相当于该数乘以10n;右移n位时,相当于该数除以10n。

计算机中小数点的位置是事先约定的,因此,二进制表示的机器数在相对于小数点作n位左移或右移时,其实质就便该数乘以或除以2n(n=1,2...n)。

移位运算又叫移位操作,对计算机来说,有很大的实用价值,例如,当计算机没有乘(除)运算线路时,可以采用移位和加法相结合,实现乘(除)运算。

计算机中机器数的字长往往是固定的,当机器数左移n位或右移n位时,必然会使其n位低位或n位高位出现空位。那么,对空出的空位应该添补0还是1呢?这与机器数采用有符号数还是无符号数有关,对有符号的移位叫算术移位。

2.算术移位规则

对于正数,由于[x]原=[x]补=[x]反=真值,故移位后出现的空位均以0添之。对于负数,由于原码、补码和反码的表示形式不同,故当机器数移位时,对其空位的添补规则也不同。下表列出了三种不同码制的机器数(整数或小数均可),分别对应正数或负数,移位后的添补规则。必须注意的是:不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。

不同码制机器数移位后的空位添补规则

码 制

添补代码

正数

原码、补码、反码

0

原码

0

负数

补码

左移添0

右移添1

反 码

1

由上表可得出如下结论:

(1)机器数为正时,不论左移或右移,添补代码均为0。

(2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。

(3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。

(4)分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同,即添0;右移时困空位出现在高位,则添补的代码应与反码相同,即添1。

例:设机器数字长为8位(含一位符号位),若A=±26,写出三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。

解:(1)A=+26=(+11010)2

则[A]原=[A]补

=[A]反=0,0011010

移位结果表示如下:

移位操作

机 器 数

对应的真值

[A]原=[A]补=[A]反

移位前

0,0011010

+26

左移一位

0,0110100

+52

左移两位

0,1101000

+104

右移一位

0,0001101

+13

右移两位

0,0000110

+6

可见,对于正数,三种机器数移位后符号位不变,左移时最高数位丢1,结果出错;右移时最低数位丢1,影响精度。

(2)A=-26=(-11010)2

三种机器数移位结果示于下表。

移位操作

机 器 数

对应的真值

移位前

1,0011010

-26

左移一位

1,0110100

-52

左移两位

1,1101000

-104

右移一位

1,0001101

-13

右移两位

1,0000110

-6

移位前

1,1100110

-26

左移一位

1,1001100

-52

左移两位

1,0011000

-104

右移一位

1,1110011

-13

右移两位

1,1111001

-7

移位前

1,1100101

-26

左移一位

1,1001011

-52

左移两位

1,0010111

-104

右移一位

1,1110010

-13

右移两位

1,1111001

-6

可见,对于负数,三种机器数移位后符号位均不变。负数的原码左移时,高位丢1,结果出错;低位丢1,影响精度。负数的补码左移时,高位丢0,结果出错;低位丢1,影响精度。负数的反码左移时,高位丢0,结果出错;低位丢0,影响精度。

下图示意了机器中实现算术左移和右移操作的硬件框图。其中(a)真值为正的三种机器数的移位操作;(b)负数原码的移位操作;(c)负数补码的移位操作;(d)负数反码的移位操作。

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

有符号数的移位称为算术移位,无符号数的移位称为逻辑移位。逻辑移位的规则是:逻辑左移时,高位移出,低位添0;逻辑右移时,低位移出,高位添0。例如,寄存器内容为01010011,逻辑左移为1010010,算术左移为00100110(最高数位“1”移丢)。又如寄存器内容为10110010,逻辑右移为01011001。若将其视为补码,算术右移为11011001。显然,两种移位的结果是不同的。上例中为了避免算术左移时最高数位丢1,可采用带进位(Cy)的移位,其示意图如下图所示。算术左移时,符号位移至Cy,最高数位就可避免移出。

计算机中逻辑移位示意图,定点数运算之移位运算(收藏)相关推荐

  1. Java二进制位运算、移位运算、、

    为什么80%的码农都做不了架构师?>>>    Java二进制位运算.移位运算 思考题 1.请看下面的代码段,回答a,b,c,d,e结果是多少? public static void ...

  2. Java从入门到精通08-二进制、位运算、移位运算

    Java从入门到精通08-二进制.位运算.移位运算 二进制(Binary)数用0和1两个数字及其组合来表示任何数.进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右到左 ...

  3. java逻辑移位和算术移位,关于对移位运算的理解

    标签: 之前在<计算机组成原理>这门课中学习了很多,其中包括二进制数的移位运算.当时并不理解他们用来作甚,迷迷糊糊的状态,学了都不知道为什么要学.什么东西总是到了需要用到的时候,才明白,哦 ...

  4. java 位与运算_java中位运算和移位运算详解

    一.位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0.首先我们看一下对正数的运算 分别看一下正数和负数的具体运算步骤 正数直接取二进 ...

  5. 计算机中逻辑运算顺序,【计算机系统】位运算与逻辑运算

    计算机系统的位运算与逻辑运算 一.位 1.定义 二进制数字系统中数据存储的最小单位,即每个二进制数0或1就称为位.位也叫比特(bit),8个bit组成一个字节(byte),每个字节表示程序中的某些文本 ...

  6. Java位运算之移位运算

    文章目录 移位运算 左移 << 位运算符 右移 >> 位运算符 无符号右移 >>> 运算符 移位运算 移位运算符在程序设计中,是位操作运算符的一种.移位运算符 ...

  7. c语言中余数取整,C 逻辑运算, 移位运算 , 取整 , 取模(取余)

    一. 按位运算 (快速操作数据的某个位) ^   按位异或 ~  按位取反 &  按位与 |  按位或 二. 逻辑运算 &&  逻辑与   有一个值为 0 ,值为 0 ||  ...

  8. java 二进制反码_Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题...

    public classDemo3 {public static voidmain(String[] args) { CycleLinkList cycleLinkList=newCycleLinkL ...

  9. Java中的位运算符、移位运算

    一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&)  :两位全为1,结果为1,否则为0: (2)按位或  (|)   :两位有一个为1,结果为1,否则为0: (3) ...

最新文章

  1. 阿里云天池 金融风控训练营Task1 广东工业站
  2. 西北民族大学c语言程序设计复试科目,2016年西北民族大学中国民族信息技术研究院962C语言程序设计复试笔试仿真模拟题...
  3. AIX errdemon 命令
  4. Java测试驱动开发--总结
  5. Django中QueryDict的坑
  6. apache tomcat php mysql 配置_Apache与Tomcat服务器整合的基本配置方法及概要说明
  7. 关于跨域的处理的几种方法的整理
  8. 关于 HSF框架 (一)简单介绍
  9. 学习外挂 -------- 成长过程(经典推荐)
  10. CAN总线协议是什么?CAN总线协议有哪些?
  11. DHCP报文分析(三级网络技术)
  12. android 手机屏蔽广告 hosts
  13. java单精度实型变量_C语言中,用关键字( )定义单精度实型变量,用关键字( )定义双精度实型变量。...
  14. floyd算法----牛栏
  15. windows无法格式化u盘_如何解决u盘0字节无法格式化的问题
  16. MATLAB-数字图像处理 量化
  17. hdu 5956 The Elder
  18. excel 筛选 粘贴_在筛选的Excel列表中粘贴快捷方式
  19. 复习七天通过软考高级「系统架构师」,我是如何做到的
  20. 超算计算机需要显卡吗,NVIDIA:中国超算性能世界第一认了 但省电我最强

热门文章

  1. 避免重复造轮子,Java 程序员必备
  2. java 基础 笔试题_非常全面的java基础笔试题
  3. 手把手教你用Python搭建一个AI智能问答系统!
  4. 网络基础:socket模块
  5. java 命令行 配置文件_命令行玩JAVA : 完善ANT的配置文件
  6. 老树开新花之shellcode_launcher免杀Windows Defender
  7. 笑谈ArcToolbox (4) ArcToolbox的隐藏关
  8. 【SQLServer】验证身份证号第18位校验码是否合法
  9. 文档服务器archive,中央归档服务器简介.pdf
  10. 计算机毕业设计 SSM养老院管理系统 智慧养老院管理系统 养老院信息管理系统Java Vue MySQL数据库 远程调试 代码讲解