大家好,又见面了,我是你们的朋友全栈君。
移位运算
视频链接地址:
https://www.bilibili.com/video/BV1BE411D7ii?from=search&seid=6420326887479343502
计算机组成原理 系列文章目录
前言
在本篇中,你将掌握
- 三种移位运算的方法:算数移位+逻辑移位+循环移位
对于定点数其表示有两种:无符号数和有符号数,其中有符号数又有原码、反码、补码、移码四种,本篇将学习四种码的运算。
在计算机中,使用移位便可实现 乘除法 = 移位 + 加法
1 移位运算
1.1 算数移位
算数移位,理解好位权和负数特殊的移位补位就可以掌握
1.1.1 原码的算数移位
对于原码的算数移位:
符号位不变,数值位右移,如上图。高位补0,低位舍弃,若舍弃的位=0,则相当于 ÷ 2;若舍弃的位=1,则会丢失精度,如 2 − 1 2^{-1} 2−1
符号位不变,数值位左移,同理。低位补0,高位舍弃,若舍弃的位=0,则相当于 × 2;若舍弃的位=1,则会出现严重误差(舍弃了最高位的1)
1.1.2 反码的算数移位
反码的算数移位,如上图,注意:
正数的反码 = 原码,移位同原码
负数的反码 = 原码数值位取反,负数反码移位运算规则为
右移:高位补1,低位舍弃
左移:低位补1,高位舍弃
1.1.3 补码的算数移位
正数的补码 = 原码,移位同原码
负数的补码 = 原码数值位取反+1,负数补码移位运算规则为
右移:同反码,高位补1,低位舍弃
左移:同原码,低位补0,高位舍弃
1.1.4 算数移位小结
- 正数的原码 = 补码 = 反码,补位都用0补
- 负数的反码 = 原码数值位取反,补码 = 原码数值位取反+1
负数反码,补位补1
负数补码,左移补0,右移补1
1.2 逻辑移位
逻辑右移:高位补0,低位舍弃。
逻辑左移:低位补0,高位舍弃。
1.3 循环移位
循环移位,二进制数在移位过程中不丢弃,像是一个队列一样头变尾或尾变头,循环移位很适合把一个数据的高低字节调换(中文字节的大端存储:高字节+低字节,小端存储:低字节+高字节)
2 小结
本篇重点,算数移位的具体实现步骤(三种码的补位规则)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158682.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...