原码

算术运算单元ALU的设计与实现

拟墨画扇 提交于 2019-12-30 13:10:27
算术运算单元ALU的设计与实现 这是2018年大三时的一个课程设计,在这里把相关技术和用到的知识分享给大家。(由于编者水平有限可能存在错误的地方,欢迎大家指正)题目给出的要求如下: 一、设计题目及要求 要求: 1.进行两个四位二进制数的运算。 2.算术运算:A+B,A-B,A+1,A-1 3.逻辑运算:A and B,A or B,A not, A xor B 注意:从整体考虑设计方案,优化资源的利用 二、设计过程及内容 2.1总体设计 ALU算术运算单元由以下几个部分构成: 图1 ALU运算单元系统结构图 为了尽可能减少资源的使用(或以相同的资源增加更多的功能),在此系统的基础上,增加基于寄存器的分时复用输入模块进行改进。 图2 基于分时复用方法的ALU运算单元结构 ①输入模块 该模块用于两个四位二进制数的输入。通过使用实验箱的拨码开关,输入高低电平,表示二进制的 1和0,四组拨码开关组合可以表示一个四位二进制数。 ②逻辑运算单元 该模块用于两个四位二级制数的逻辑运算。通过列出一位二进制数逻辑运算的真值表(含有四种不同的逻辑运算功能),得出了一位二进制数逻辑运算单元的表达式(已使用卡诺图化简)。将按照逻辑表达式连接好的多个一位二进制逻辑运算单元进行组合,可得到多位二进制数逻辑运算单元。 通过使用“真值表+卡诺图”的方法将所有的逻辑运算的表达式融合在一起进行化简

有符号补码的加减法以及大小比较

↘锁芯ラ 提交于 2019-12-27 04:30:27
有符号补码的加减法以及大小比较 1.瞎扯简述  最近在写用fpga进行解缠绕的IP,解缠绕做的事情并不算复杂,就是比较后进行加减而已。但是解缠绕前面这个IP是用的xilinx的Cordic内核,算出来的是补码,过去只做了一些什么简单的取反加一的简单原码补码转换,所以在这里加减就懵了,没有真正碰过补码运算,正好借此机会好好整明白补码的操作。 2.原码与补码的转换  什么是有符号原码,补码怎么转换的,百度即可,耐心看5分钟就整明白了。 3.表示范围  对于8位有符号数的来讲,原码很容易理解,表示范围是-127-127。但是计算机不采用原码存储,采用补码,+0和-0的补码都是0000 0000,当时最令我疑问的1000 0000为什么表示-128,对1000 0000的符号位不变,数值位取反加一,就变成了1 0000 0000,就算我人为规定了1 0000 0000这个就是-128的补码,但是计算机怎么识别呢,毕竟这是个9位数据。   其实 ,还是自己低估了补码的意义。  我们就来看看把1000 0000作为-128的补码能不能参与运算,为了方便大家验证,我们下面不以 8位有符号数来验证,以4位有符号数验证。4位有符号数是从-8-7,1000就是-8的补码。   举个例子 ,-8+6=1000+0110=1110 1110的原码是1010=-2 正确 ,1000作为

Java中的强制类型转换 —— 大数转小数

社会主义新天地 提交于 2019-12-26 17:11:54
这里主要讨论一下大数转小数,比如int类型转short类型。小数转大数,如short 转 int不做讨论。 首先要明确一下转换规则: 大数转小数,多出的高位部分会被截断 。比如 int 占 4个byte(32 bit), byte占 1个byte(8bit), 那int 转 byte ,int 高位多出的那24个bit会被截断。 例1: int b = 233; // 正整数强转 System.out.println((byte)b); // 原码: 0000 0000 0000 0000 0000 0000 1110 1001 // 补码(内存):0000 0000 0000 0000 0000 0000 1110 1001 // 正数的原码、反码、补码都一样 // 截取... // 补码(截取后-内存):1110 1001 // 最高位是 1,说明是负数,因此在显示的时候还需要做转化... // 反码: 1110 1000 // 原码: 1001 0111 // 16+4+2+1 = -23 (注意符号位是 1,是负数) 例2: int b = -233; // 负整数强转 System.out.println((byte)b); // 原码: 1000 0000 0000 0000 0000 0000 1110 1001 // 因为是负数,所以符号位是 1 // 反码:

动手动脑(一)

北慕城南 提交于 2019-12-26 04:40:44
一, 代码: public class EnumTest { private enum MyEnum{ ONE, TWO, THREE } public static void main(String[] args) { for(MyEnum value:MyEnum.values()){ System.out.println(value); } } } 运行结果: ONE TWO THREE 总结如下: 1.java中的enum关键字背后实际是Enum这个类实现的。 2.values()方法遍历枚举类中的每个元素。 3.在我们编写自定义的enum时,其中是不含values方法的,在编译java文件时,java编译器会自动帮助我们生成这个方法。 二, 原码:所谓原码就是 二进制 定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。 示例: +100表示为2进制数为+1100100 原码=01100100 反码=01100100 补码=01100100 正数的话3码都一样 -100表示为2进制树为-1100100 原码=11100100 反码=10011011(第一位表示符号的数字不变) 补码=反码+1

课后作业和动手动脑

半世苍凉 提交于 2019-12-26 03:55:53
s , t 引用的不是同一对象; 枚举不是原始的数据类型,所以显示 false ; s 和 u 是同一个字符串。 结论:( 1 )枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值引用同一个对象;( 2 )可以使用“ == ”和 equals ()方法直接对比枚举变量的值。 2. +X+Y 是对字符串进行连接而不是对他们进行数学上的运算 课后练习 ( 1 ) 1.反码:机器数的反码可由原码得到。如果机器数是正数,则机器数的反码和原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反得到的。 2.机器数的补码可由原码的得到。如果机器数是正数,则该机器数的补码和原码一样;如果机器数是负数,则该机器数的补码是对它的原码(符号位除外)各位取反,并在末位加 1 得到的。 3.原码表示法是机器数的一种简单的表示法。其符号位用 0 表示正号,用 1 表示负号 ( 2 ) 这个涉及到二进制与十进制的转换问题。 N 进制可以理解为:数值 × 基数的幂,例如我们熟悉的十进制数 123.4=1×10²+2×10+3×(10 的 0 次幂 )+4×(10 的 -1 次幂 ) ;其它进制的也是同理,例如二进制数 11.01=1×2+1×(2 的 0 次幂 )+0+1×(2 的 -2 次幂 )= 十进制的 3.25 。 double 类型的数值占用 64bit ,即

DAY2总结

天涯浪子 提交于 2019-12-26 02:17:48
一。进制转换 1.十进制转化为其他的任意进制: 除商取余,除到商0,余数反转 2.8421码快速转化法: 8421码是中国大陆的叫法,8421码是BCD代码中最常用的一种。在这种编码方式中每一位二值代 码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来,得到的结果就是它所代表的 十进制数码。 3.二进制转化为八进制 十六进制: (1.)通过转化为十进制在进行转化 (2).通过8421码进行转化 4.原码 补码 反码: 了解原因:计算机底层对数据进行计算都是以"补码"进行计算的 原码 就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小 反码 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码 正数的补码与其原码相同;负数的补码是在其反码的末位加1 二.变量(重点) 1.变量的概述:变量:常量是固定不变的数据,那么在程序中可以变化的量称为变量。 2.数据类型:java属于强类型语言,java中的数据类型分为两大类,1.基本数据类型,包括 整数、浮点数、字符、布尔 2.引用数据类型 基本数据类型:四类8种 占用字节数 取值范围 整数类型 字节类型 byte 1 -128~127 短整型 short 2 默认整数类型 int 4 长整型 long 8 浮点类型 单精度类型 float 4 双精度类型(默认)

浮点型表示方法

怎甘沉沦 提交于 2019-12-25 08:30:12
今天在牛客刷题时,遇到了一题浮点型表示类型的题目,因为之前没接触,故记录下来。 浮点型的通用表达式 N=M × R E 比如: 2.3456 =2 .3456 × 10 1 , 其中M(Mantissa):浮点数的 尾数 ,R(Radix):阶码的 基数 ,E(Exponent):阶的 阶码 。 其中,R在计算机中通过用2,8或16表示,是个不确定的常量。 因此,在已知标准下,要表示浮点数, 一是要给出尾数M的值,通常用定点小数形式表示,它决定了浮点数的表示精度,即可以给出的有效数字的位数。 二是要给出阶码,通常用定点整数形式表示,它指出的是小数点在数据中的位置,决定了浮点数的表示范围。因此,在计算机中,浮点数通常被表示成如下格式:(假定为32位浮点数,基为2,其中最高位为符号位) 浮点数的规格化表示 按照上面的指数表示方法,一个浮点数会有不同的表示: 0.3 × 10 0 0.3×100; 0.03 × 10 1 0.03×101; 0.003 × 10 2 0.003×102; 0.0003 × 10 3 0.0003×103; 为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做 规格化处理 。 在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数的倒数,即 | M | ≥ 1/ R 。 即要求尾数域的最高有效位应为1,称满足这种表示要求的浮点数为规格化表示

学习Day2

两盒软妹~` 提交于 2019-12-23 01:08:17
知识点 1、进制转换 二进制: 0b 八进制: 0 十六进制:0x 八进制转二进制:三位一组 十六进制转二进制:四位一组 原码:我么眼中所见的二进制形式为原码 (正数首位为零,负数首位为一) 反码:负数首位不变,其他取反 补码:在原码的基础上加1 正数的原反补是一样的 2、变量 局部变量:定义在方法类中的变量叫做局部变量, 想要使用局部变量 ,局部变量就必须要被赋值否则报错。 成员变量:定义正在类中、方法外,成员变量不需初始化值,因为系统会默认给每个成员变量一个初始值。 3、数据类型 基本数据类型: byte(1个字节) short(2) int(4) long(8) float(4) double(8) boolean(4) char(2) 引用类型:类、接口、数组 数据类型强制转换: byte a=(byte)300;因为byte范围在-128–127,所以会报错。 *byte、short、char类型在做运算的时候会自动提升为int类型* *同名变量可以重新赋值,但不能再次定义,也就是前面不能有数据类型符如int、byte* **4、变量访问原则**就近原则 static出现前定义的变量也要是静态的static int a=10; 来源: CSDN 作者: Revolution??? 链接: https://blog.csdn.net/TT_EVERTDAY/article

原码、反码、补码

和自甴很熟 提交于 2019-12-22 01:51:40
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。 原码 原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。 **1. 原码的优点:**简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011 **2.原码的缺点:**原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。 反码 反码通常是用来由原码求补码或者由补码求原码的过渡码。 反码跟原码是正数时一样;负数时,反码就是原码符号位除外,其他位按位取反。 补码 正数的补码是其二进制表示,与原码相同 求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1 同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。 原码求补码

数据类型存储的基础知识

断了今生、忘了曾经 提交于 2019-12-21 16:34:11
整型的存取 在计算机中最高位为符号位,0表示正数,1表示负数。在计算机中数据是使用其补码表示的,但正数补码是其本身,负数的补码是负数的源码取反加一得到的补码。 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 在java中的整数类型有四种,分别是byte short in long,byte只是一个字节0或1。 其他的三种类型如下: 1、 基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此方) 最大值:Short.MAX_VALUE=32767 (2的15次方-1) 2、 基本类型:int 二进制位数:32 包装类:java.lang.Integer 最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方) 最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1) 3、 基本类型:long 二进制位数:64 包装类:java.lang.Long 最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方) 最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1) 机器数