首页 > 其他分享 >算术逻辑单元(ALU)

算术逻辑单元(ALU)

时间:2023-11-01 18:36:13浏览次数:21  
标签:反码 算术 补码 负数 int 原码 ALU 单元

算术逻辑单元(ALU)

构建一个四位算术逻辑单元,可以实现两个四位二进制数的加减法运算。

减法

一个二进制数字表示如下:

0010

四位可以表示从0~15的十进制数。

若使最高位设置为符号位,0表示正数,1表示负数,那么可以表示从-8~7的十进制数。
则0010表示2.

负数的表示方法有:原码、反码、补码。

  • 原码:符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。
  • 反码:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
  • 补码:正数的补码是其本身,负数的补码是在其原码的基础上,符号位不变,其余各个位取反,最后+1。

在这里,我们使用补码来表示负数。

补码转换

正数

正数的补码就是其本身。

例如:2 为 \(10_B\),则其补码为 \(10_B\), 存储时为 \(0010_B\)。

  • 0 为 \(00_B\),则其补码为 \(00_B\), 存储时为 \(0000_B\)。

负数

负数的补码为其反码+1。

例如:2 为 \(0010_B\),表示-2时,最高位符号位为1,算出其反码为 \(101_B\),补码为 \(110_B\),存储时为 \(1110_B\)。

即 \(1110_B = -8\times1 + 4\times1 + 2\times1 + 1\times0 = -2\)

亦可理解成,在0的最前面补上一个1, 然后减去其绝对值。

例如:3 为 \(0011_B\),表示-3时,在0的最前面补上一个1,变为 \(10000_B\),然后减去其绝对值,即 \(10000_B - 0011_B = 1101_B\),存储时为 \(1101_B\)。


由此得到,

int add (int a, int b) {
    return a + b;
}
int sub(int a, int b) {
    return add(add(a, ~b), 1);
}

后加的1可以由减法标志决定


算术逻辑单元(Algorithmic Logic Unit, ALU)

ALU Subtract

ALU Add

最后加上三个输出端,分别为是否进位,是否是负数,是否为0.

TODO: Make a 8 bit ALU

标签:反码,算术,补码,负数,int,原码,ALU,单元
From: https://www.cnblogs.com/neoluxplaza/p/17803812.html

相关文章

  • Shell-变量的算术运算
    一、算术运算符1、+、-求和、a+b  a-b   2、*、/、%求乘积,商,余数   a*b  a/b   a/b 3、**幂运算,例如3**3是求3的立方,即27 4、+=、-=、*=、/=、%=例a+=1相当于a=a+1 5、++variable、--variable 先将变量variable的值加1,然后再赋......
  • 解决xgboost\core.py", ValueError: feature_names may not contain [, ] or <
    解决"xgboost\core.py",ValueError:feature_namesmaynotcontain[,]or<在使用xgboost进行特征工程时,有时会遇到类似下面的错误提示:pythonCopycodeFile"xgboost\core.py",lineXXX,inset_inforaiseValueError('feature_namesmaynotcontain[,]o......
  • 单元格内多段数字,TEXTSPLIT结合SUM快速求和!
    1职场实例小伙伴们大家好,今天我们来讲解一个职场办公中经常遇到的问题模型:单元格内,用分隔符间隔开的多段数字,如何实现快速求和?今天我们想要用函数公式的方式实现。如下图所示:A列为一列数据,每个单元格内的数字都是以分隔符号逗号间隔开的,我们想要将单元格内每段数字相加求和,显示在C......
  • java poi 导出excel 单元格样式
    CellStylecs=wb.createCellStyle();//设置字体Fontfont=wb.createFont();font.setColor(IndexedColors.BLACK.getIndex());font.setFontHeightInPoints((short)12);font.setBold(true);//字体样式cs.setFont(font1);//边框cs.setBorderLeft(BorderStyle.THIN);......
  • 软件测试|MySQL算术运算符使用详解
    简介MySQL是一种流行的开源关系型数据库管理系统,广泛用于各种应用程序和网站的数据存储和管理。在MySQL中,算术运算符是执行数学计算的特殊符号,用于处理数字类型的数据。本文将详细介绍MySQL中常用的算术运算符及其使用方法。常用算术运算符算术运算符是SQL中最基本的运算符,M......
  • 汇编-浮点单元寄存器
      浮点单元(Floating-PointUnit,FPU)执行高速浮点算术运算。之前为了实现这个目的,需要一个单独的协处理器芯片。从Intel486开始,FPU已经集成到主处理器芯片上了。FPU中有8个浮点数据寄存器,分别命名为ST(0)、ST(1)、ST(2)、ST(3)、ST(4)、ST(5)、ST(6)及ST(7)。其余的控制......
  • systemd中的slice服务单元
    使用场景对一组服务进行管理,比如限制资源使用、调整启动顺序和依赖关系。比如,好几个服务都需要限制内存使用,可以每个服务都加个MemoryLimit=373741824,也可以将这些服务加入到同一个slice,然后,只需要在slice中配置MemoryLimit=373741824。介绍systemd的slice是一种服务单元,用......
  • Tabular Value-Based Reinforcement Learning
    ReadingNotesaboutthebookDeepReinforcementLearningwrittenbyAskePlaatRecently,IhavebeenreadingthebookDeepReinforcementLearningwrittenbyAskePlaat.ThisbookisagoodintroductiontothetheoryofDeepReinforcementLearning.Andit......
  • Markov Decision Process Model Based on Value Iteration
    TheoriesMarkovDecisionProcessGenerally,wenotesaMDPmodelas\((S,A,T_a,R_a,\gamma)\).Itstransitionfunctionis\(T_a(s,s')=\Pr(s_{t+1}|s_t=s,a_t=a)\),rewardfunctionis\(R_a(s,s')\).Andactionschoosingsatisfiesaspec......
  • .NET 反序列化 GetterSettingsPropertyValue 攻击链
    0x01 链路1 SettingsPropertyValueSettingsPropertyValue位于命名空间 System.Configuration,用于应用程序存储和检索设置的值,此类具有Name、IsDirty、Deserialized、PropertyValue、SerializedValue等多个公共成员,其中SerializedValue属性用于获取或者设置序列化的值,便于持久......