【新书推荐】3.2节 位运算之加减乘除

news2024/11/18 1:33:06

本节内容:二进制移位运算,以及逻辑运算与算术运算之间的转换。任何进制的位运算本质都是一样的。

         ■二进制数移位运算:二进制数向左移位运算相当于做2的幂乘法运算,二进制数向右移位运算,相当于做2的幂除法运算。

         ■十进制数移位运算:十进制移位运算与二进制数移位运算本质相同。

         ■移位运算的应用:移位运算实现乘法或除法运算。

         ■逻辑运算的应用举例:大小写字母的转换。

         ■二进制位运算与十进制加法运算之间的关系:二进制的加法运算与十进制加法运算本质相同,分为三个步骤实现:

  1. 二进制加法运算即xor异或运算。
  2. 判断是否有进位,and与运算。
  3. 如果有进位值,进位值左移1位,继续做进位值的加法运算,直到没有进位为止。
3.2.1 二进制数移位运算

    ■左移(进位):各二进位全部左移若干位,高位丢弃,低位补0。

举例

shl(<<)      1101 1000  左移2位为:0110 0000  。

0000 0001<<1==0000 0010         2   相当于1*21,结果为2。

0000 0001<<2==0000 0100         4   相当于1*22,结果为4。

0000 0001<<3==0000 1000              8   相当于1*23,结果为8。   

1111 1111=27 +26 +25+ 24 + 23 +22 +21 + 20 =128+64+32+16+8+4+2+1=255。

右移(借位):各二进位全部右移若干位,低位丢弃,高位补0或者补符号位。

举例

1.8位无符号整数右移。

shr(>>)      1101 1000  右移2位为:0011 0110。

15D     0000 1111>>1==0000 0111    7    移出0001   相当于15/2,商为7,余数1。

15D     0000 1111>>2==0000 0011    3    移出0011   相当于15/4,商为3,余数3。

15D     0000 1111>>3==0000 0001    1    移出0111   相当于15/8,商为1,余数7。

2.8位有符号整数4右移1位,即 4/2=2。

二进制数右移:0000 0100 右移1位,正整数高位补符号位0,结果为0000 0010B。

3.8位有符号整数-4右移1位,即 -4/2=-2。

第一步:计算-4的补码。

原码:1000 0100

反码:1111 1011

补码:1111 1100

第二步二进制数右移:1111 1100 右移1位,正整数高位补符号位1,结果为1111 1110B。

3.2.2 十进制数移位运算

    在上一章中我们强调过任何进制的算术逻辑运算本质上都是相同的。以此推论,二进制数移位运算和十进制数移位运算也应该是相同的。

举例

10进制数11左移2位,1100,空位补0,等于11*102。

10进制数11右移2位,0.11,空位补0,等于11/102 。

3.2.3 移位运算的应用

如果计算机没有乘法电路和除法电路时,可以用移位和加法运算来实现乘法和除法运算。在以后的代码示例和练习中,我们会经常使用移位运算来代替乘法或除法运算,特别是2的幂运算时,比较简单便捷。此处不再赘述。

3.2.4 逻辑运算的应用举例

举例

大写字母和小写字母的转换。如表3-3所示,在ASCII码表中大写字母和小写字母是有规律的,大写字母对应的ASCII值+20h,就是小写字母。我们也可以使用逻辑运算的方法进行大小写字母的转换。

大写A转换为小写a的算法:第5位置1,or运算。

小写a转换为大写A的算法:第5为置0,and运算。

             01000001          A

      or    00100000    

             01100001           a

                                                                 表3-3 ASCII码字母表

3.2.5  逻辑运算与加法运算之间的关系

例:十进制 168+934?

分为三个步骤:

第一步:加法运算;

第二步:进位运算;

第三步:进位结果左移1位,加进位值;

思考

思考:如果是十进制的计算机,可以通过位运算来实现加法运算吗?

例:  二进制1+7=?计算机怎么算(默认宽度为8位)

   0000  0001

   0000  0111 

   0000  1000

分为三个步骤:

第一步:异或运算,想当于十进制的加法运算;

第二步:与运算,相当于十进制的进位运算;

第三步:进位结果左移1位,加进位值;

计算机加法运算实现过程

图3-4 计算机加法运算过程

         如图3-4所示,计算机通过三个步骤实现加法运算。

第一步由异或逻辑电路实现加法运算;

第二步由逻辑与电路判断是否产生进位;

第三步如果有进位,将进位值1左移一位;

如此循环,直至不再有进位值为止。

计算机减法运算实现过程

         例:3-4=?(默认宽度为8位)→  3+(-4)

图3-5 计算机加法运算过程

如图3-5所示,计算机减法运算是加法运算的逆运算,同样可以通过逻辑异或、逻辑与和移位运算来实现。因此,早期的8086 CPU只有加法电路,但是同样可以实现减法、乘法和除法运算。

 

总结

二进制实现了逻辑运算和算术运算的统一。

计算机是通过逻辑电路实现算术逻辑运算和算术运算的。

练习

1、如何通过位运算判断一个数是奇数还是偶数?

2、如何读取二进制数中的某一位的值?

3、如何设置二进制数中的某一位的值?

4、2*8的移位法实现方式。

5、使用异或对 87AD6 进行加密后再进行解密,加解密密钥:5。

6、八进制数2-5 在计算器中的的结果是:1777777777777777777775   为什么?                                           

7、只用逻辑运算计算2-3=?(涉及内容:逻辑运算、移位、数据宽度)。

本文摘自编程达人系列教材《X86汇编语言基础教程》。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qt学习:Table widget控件

目录 头文件 实战 重新配置ui界面 添加头文件 在构造函数中添加初始化 显示方法 该实例是在sqlite项目上添加qt学习&#xff1a;QTSQL连接sqlite数据库增删改查-CSDN博客 头文件 #include <QTableWidgetItem> 实战 重新配置ui界面 用法介绍&#xff0c;可以双击…

大数据StarRocks(八):资源隔离实战

前言 自 2.2 版本起&#xff0c;StarRocks 支持资源组管理&#xff0c;集群可以通过设置资源组&#xff08;Resource Group&#xff09;的方式限制查询对资源的消耗&#xff0c;实现多租户之间的资源隔离与合理利用。在 2.3 版本中&#xff0c;StarRocks 支持限制大查询&#…

RK3568 Android 13 系统裁剪

android 13 系统裁剪是个大工程&#xff0c;裁剪也是需要大量的测试&#xff0c;才能保证系统的稳定性&#xff0c;以下是RK官方给出的裁剪方案&#xff0c;有兴趣的可以去看一下&#xff0c;对裁剪不是要求过高的可以根据官方的建议&#xff0c;对系统进行裁剪: Rockchip And…

ssh 配置

ssh 配置 在管理Git项目上&#xff0c;很多时候都是直接使用 https url 克隆到本地&#xff0c;当然也有有些人使用 SSH url 克隆到本地。 这两种方式的主要区别在于&#xff1a;使用 https url 克隆对初学者来说会比较方便&#xff0c;复制 https url 然后到 git Bash 里面直…

纯html+js+css个人博客

首页 <!DOCTYPE HTML> <html> <head> <title>博客</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta name"viewport" content"widthdevice-width, initial-sca…

E. Vlad and a Pair of Numbers(位运算)

思路&#xff1a;如果x在这一位是1&#xff0c;说明a,b在这一位一个是1一个是0&#xff0c;我们默认a为1&#xff0c;b为0.. 对于n的一些位为0&#xff0c;那么a&#xff0c;b在这一位肯定相同。我们想&#xff0c;如果a和b的和右移一位与x相同&#xff0c;所以1的位置是相同的…

按照模板生成文件,Word 或者 Excel

需求流程&#xff1a; 模板部分如图&#xff1a; Web端技术选用Jfinal 功能实现&#xff1a; 下面代码是调用 --“外部接口”--传参&#xff0c;将前端选中的信息传给后端&#xff0c; 另外将后端返回的文件流下载成文件 package ibasic.web.com.controller;import java.io.Bu…

链表--114. 二叉树展开为链表/medium 理解度C

114. 二叉树展开为链表 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而…

ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口;向量数据库的挑战和未来

&#x1f989; AI新闻 &#x1f680; ChatGPT更新了Mention功能&#xff0c;集结若干GPTs作战&#xff0c;AI智能体的心智入口 摘要&#xff1a;OpenAI在ChatGPT中引入了一个新功能&#xff0c;允许用户在聊天时任意一个GPTs&#xff08;即ChatGPT最新推出的AI Agent 智能应用…

Java 对部分接口返回数据进行加密,或其他处理

业务场景&#xff1a;后端项目中分为PC端和移动端接口&#xff0c;移动端为例如 mobile 开头的URl&#xff0c;需求为调用移动端接口时&#xff0c;对返回数据进行加密&#xff0c;PC端不加密 import cn.hutool.core.date.DatePattern; import cn.hutool.json.JSONConfig; impo…

HiveSQL题——排序函数(row_number/rank/dense_rank)

一、窗口函数的知识点 1.1 窗户函数的定义 窗口函数可以拆分为【窗口函数】。窗口函数官网指路&#xff1a; LanguageManual WindowingAndAnalytics - Apache Hive - Apache Software Foundationhttps://cwiki.apache.org/confluence/display/Hive/LanguageManual%20Windowin…

力扣题集(第一弹)

一日练,一日功;一日不练十日空。 学编程离不开刷题&#xff0c;接下来让我们来看几个力扣上的题目。 1. 242. 有效的字母异位词 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数…

粒子群算法求解港口泊位调度问题(MATLAB代码)

粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种基于群体智能的优化算法&#xff0c;它通过模拟鸟群或鱼群的行为来寻找最优解。在泊位调度问题中&#xff0c;目标是最小化所有船只在港时间的总和&#xff0c;而PSO算法可以帮助我们找到一…

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则&#xff08;1&#xff09;选择根桥网桥原则&#xff08;2&#xff09;选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…

如何获得《幻兽帕鲁》隐藏帕鲁唤夜兽?13000个配种配方查询 幻兽帕鲁Steam好评率还在涨 Mac苹果电脑玩幻兽帕鲁 Crossover玩Windows游戏

《幻兽帕鲁》是一款Steam平台热门游戏&#xff0c;开放式大陆和养成式冒险结合&#xff0c;成为2024首款热门游戏&#xff0c;不过由于官方仅发布了Windows版的游戏客户端&#xff0c;Mac用户无法直接玩&#xff0c;好在有Crossover这样的神器&#xff0c;让苹果电脑也能玩上《…

U-Boot学习(6):初始化之_main函数源码分析

在上一节系统初始化之start.S源码分析详解中&#xff0c;我们分析了上电后的代码执行流程&#xff0c;实际上就是对系统特权模式、CP15、向量表等进行配置。最后一步就是进入_main函数了&#xff0c;这个就是U-Boot的主程序了&#xff0c;它完成了对系统内存、堆栈、全局结构体…

非常好用的高效率截图工具-Snipaste

官网:https://zh.snipaste.com/ 帮助文档: https://docs.snipaste.com/zh-cn/

已实现:vue、h5项目如何使用echarts实现雷达图、六边形图表

说实话&#xff0c;要说图表里&#xff0c;最强的应该属于echarts了&#xff0c;不管是接入难度上&#xff0c;还是样式多样性上&#xff0c;还有社区庞大程度上&#xff0c;都是首屈一指的&#xff0c;反观有的人习惯用chart.js了&#xff0c;这个无可厚非&#xff0c;但是如果…

Glide完全解读

一&#xff0c;概述 glide作为android流行的图片加载框架&#xff0c;笔者认为有必要对此完全解读。glide提供了三级缓存、生命周期Destroy后自动移除缓存、自动适配ImageView&#xff0c;以及提供了各种对图片修饰的操作&#xff0c;如剪裁等。本文通过最简单的使用&#xff…

Vim实战:使用 Vim实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…