算数移位,逻辑移位以及循环移位

目录

一.算数移位

1.原码的算数移位一一符号位保持不变,仅对数值位进行移位

2.反码的算数移位

3.补码的算数移位

二.逻辑移位

三.循环移位


一.算数移位

1.原码的算数移位一一符号位保持不变,仅对数值位进行移位

算数移位是通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法,除法。例如:

1(符号位), 0001010.0=2^{1}+2^{3}=-10D

将算数右移(右移后低位舍弃,高位补0):

1, 00101.00--->1,0000101=2^{0}+2^{2}=-5D,也就是-10D/22^{1}

我们再继续右移

1, 0000010.1--->1,0000010(低位被舍弃)= -2D,这不是-5D的一半

因为舍去了低位的1,这个1代表2^{-1}所以若舍弃的位=0,则相当于\div2,若舍弃的位\neq 0就会丢失精度

同理:

1,0101000=-40D

经过左移得到

1,1010000=-80D

再次左移

1,0100000=-32D,而不是-160D,这是因为7位bit位只能表示0~127的绝对值的范围,这个值已经超出了范围,这样就会出现严重误差。

右移:高位补0,低位舍弃。若舍弃的位=0,则相当于\div2;若舍弃的位\neq 0则会丢失精度

左移:低位补0,高位舍弃。若舍弃的位=0,则相当于X2;若舍弃的位\neq 0则会出现严重误差

2.反码的算数移位

正数:

正数的反码与原码相同,因此对正数反码的移位运算也和原码相同。即右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。

负数:

负数的反码数值位与原码相反,因此负数反码的移位运算规则如下:

右移:高位补1,低位舍弃

左移:低位补1,高位舍弃

3.补码的算数移位

正数:

正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。即右移:高位补0,低位舍弃。左移:低位补0,高位舍弃。

负数:

根据补码的规律,最右边的“1”的右边的数与原码一致,左边的数与反码相同,不太熟悉可以看看:

http://t.csdnimg.cn/T0bU6

所以补码的负数的算数移位规则如下:

右移(同反码):高位补1,低位舍弃。

左移(同原码):低位补0,高位舍弃。

总结:

举例:如果想实现-20*7的效果,那么计算机就将不左移,左移1位,左移两位的数进行相加,完成乘法操作。

二.逻辑移位

右移:高位补0,低位舍弃。

左移:低位补0,高位舍弃。

可以把逻辑移位看作是对"无符号数"的算数移位。

例如获取RGB值的过程:

R=102 01100110

G=139 10001011

B=139 10001011

三.循环移位

循环左移后移出的数会被补到最右边

右移同理,循环右移后,右边移出的数会被补到最左边

带进位位的循环移位

循环左移会将原本数值的最高位,移动到进位位CF,并且将原本CF的值,补到最右边

循环右移同理,将数值位的最低位放到CF中,CF的值放到数值位的最高位中

循环移位一般用在大端存储和小端存储转换中,大端存储和小端存储的含义如下:

大端是高字节存放到内存的低地址
小端是高字节存放到内存的高地址

32位int型数0x12345678举例:

循环移位对于16位bit(2个字节)数的大端小端转换中比较有用,直接向左移动8位bit或向右移动8bit即可。

而对于32位bit可以进行如下处理:

1.将整数表示为4个字节,即[0x12, 0x34, 0x56, 0x78]。

2.将这4个字节的位置进行互换,即将第一个字节和最后一个字节交换,将第二个字节和倒数第二个字节交换。

3.调换后的结果为[0x78, 0x56, 0x34, 0x12]。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416694.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue二次封装ant-design-vue中的Modal弹窗组件,实现拖拽,全屏两种功能,原有参数属性不变

在我们的项目的有的地方需要用弹框的拖拽,以及弹窗自定义全屏显示的需求,所以再次将二次合一,同时弹框里面内容自适应屏幕高度 在ant-design-vue中,已经实现了拖拽,全屏的功能,下面是ant官网的示例 自定义…

宋仕强论道之再混华强北(三十五)

我是2012年重新回到华强北的,宋仕强说来深圳市第一份工作就在华强北担任一名工程师,和华强北有深厚的感情。我回来后经常混华强北的上层圈子跟老板老板娘们吹牛逼,最初大家看我穿的衣冠楚楚人模狗样的但态度吊儿郎当,理论一套一套…

K8s调试积累

文章目录 一、K8S 集群服务访问失败?二、K8S 集群服务访问失败?三、K8S 集群服务暴露失败?四、外网无法访问 K8S 集群提供的服务?五、pod 状态为 ErrImagePull?六、探测存活 pod 状态为 CrashLoopBackOff?七…

PDF.js - 免费开源的 JavaScript 读取、显示 PDF 文档的工具库,由 Mozilla 开发并且持续维护

最近新项目需要处理 PDF,研究了 PDf.js 之后觉得很不错,于是写篇文章推荐给大家。 PDF.js 的功能和它的名字一样简单,是一个使用 HTML5 技术来让前端网页支持读取、解析和显示 PDF 文档的 JS 工具库。这个项目由大名鼎鼎的 Mozilla 组织开发…

离线数据仓库-关于增量和全量

数据同步策略 数据仓库同步策略概述一、数据的全量同步二、数据的增量同步三、数据同步策略的选择 数据仓库同步策略概述 应用系统所产生的业务数据是数据仓库的重要数据来源,我们需要每日定时从业务数据库中抽取数据,传输到数据仓库中,之后…

简单实用的恒温控制器

工作原理如下:ST是WTQ-288型电接点压力式温度计,当恒温箱内的温度降低到下限时,ST的指针与下限接点接触,双向可控硅通过R被强制触发导通,接通加热器RL的电源,于是恒温箱内温度上升。ST的指针转动&#xff0…

SPI 动态服务发现机制

SPI(Service Provier Interface)是一种服务发现机制,通过ClassPath下的META—INF/services文件查找文件,自动加载文件中定义的类,再调用forName加载; spi可以很灵活的让接口和实现分离, 让API提…

Docker进阶篇-安装MySQL主从复制

一、MySQL主服务器 1、新建主服务器容器实例3307 docker run -p 3307:3306 \--name mysql-master \--privilegedtrue \-v /mydata/mysql-master/log:/var/log/mysql \-v /mydata/mysql-master/data:/var/lib/mysql \-v /mydata/mysql-master/conf:/etc/mysql \-e MYSQL_ROOT_…

菜鸟关于做前、后端的整理(html、js),以及疑问

涉及到后端的接口py&#xff0c;前端html和js 这三部分就按照如下格式放到server项目主路径下&#xff0c;这样后端机可以作为一个前端server main.pystaticmain.jsmain.htmlhtml 首先是html要设定网页的显示 <!DOCTYPE html> <html> <head><title>…

python 自动化模块 - pyautogui初探

python 自动化模块 - pyautogui 引言一、安装测试二、简单使用三、常用函数总结 引言 在画图软件中使用pyautogui拖动鼠标&#xff0c;画一个螺旋式的正方形 - (源码在下面) PyAutoGUI允许Python脚本控制鼠标和键盘&#xff0c;以自动化与其他应用程序的交互。API的设计非常简…

ASEPRITE使用笔记

aseprite学习笔记 快捷键 新建图层后,按快捷键c可以调出画布属性框放大缩小画布快捷键,鼠标滚轮移动画布快捷键,空格ctr+d,取消选取基本概念 软件五个基本区域:菜单栏、工具属性栏、工具栏、图层栏、颜色栏颜色栏分为色板和调色区域注意事项 创造时,需要把输入法调整成应…

java-IO

JAVA IO - java io可以让我们用标准的读写操作来完成对不同设备的读写数据工作. - java将IO按照方向划分为输入与输出,参照点是我们写的程序. - 输入:用来读取数据的,是从外界到程序的方向,用于获取数据. - 输出:用来写出数据的,是从程序到外界的方向,用于发送数据. java将…