16进制的乘法运算

以往遇到16进制的乘法都是按照10进制的思路去做,例如17x68=(相当于10进制的23x104):
在这里插入图片描述
但总觉得还是麻烦了些,所以还是想请教一下老铁们有没有其他的算法

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
二进制图文详解 二进制Binary 2进制 逢二进一的计数规则。 在计机内部,一切数据都是2进制的!! 2进制的数字 补码 补码本质是一种解决负数问题的法。 1. 将数据的一半当做负数使用。 2. 补码在内存中是2进制的,显示的时候为10进制。 - Java利用法支持了补码计: - Integer.parseInt() - Integer.toString() 3. 补码的缺点: - 不支持超范围计 - 超范围计自动溢出 4. 解决补码的缺点:采用更大范围(更多位数)的补码 Java是如何计 -2-1 的 补码的规律 1. 最大值的规律:最高位0 剩下全是1 - int类型:一个0,31个1 - long类型:一个0,63个1 2. 最小值的规律:最高位1 剩下全是0 - int类型:一个1,31个0 - long类型:一个1,63个0 3. 负数的最高位是1, 正数最高位是0 - 最高位做为识别正数和负数的标志位:称为符号位 - 注意:符号位不是用来表示正负号的!!! 4. -1 的规律:所有位都是1!! 5. 溢出是有规律的! 是一个周期性计结果。 - 最大值+1 = 最小值 6. 补码的对称现象:-n = ~n + 1 案例: int max = Integer.MAX_VALUE; System.out.println(Integer.toBinaryString(max)); int min = Integer.MIN_VALUE; System.out.println(Integer.toBinaryString(min)); long lmax = Long.MAX_VALUE; System.out.println(Long.toBinaryString(lmax)); long lmin = Long.MIN_VALUE; System.out.println(Long.toBinaryString(lmin)); //-1的规律 int n = -1; System.out.println(Integer.toBinaryString(n)); long l = -1L; System.out.println(Long.toBinaryString(l)); //最大值+1溢出得到最小值 // 推论:Java中的int数字是按照补码圆环排列的 int m = Integer.MAX_VALUE+1; System.out.println(m);//最小值 //一个数的溢出测试: n = 345; m = n + Integer.MAX_VALUE+1; System.out.println(m);//负数 m = n + Integer.MAX_VALUE+1+ Integer.MAX_VALUE; System.out.println(m);//344 正数 m = n - (Integer.MAX_VALUE+1+ Integer.MAX_VALUE+1); System.out.println(m);//345 正数 经典面试题1 正数的溢出结果是负数(错误!!!) 经典面试题2 int i = Integer.MAX_VALUE+1; System.out.println( Integer.toBinaryString(i)); 选择运行结果(D): A. 11111111111111111111111111111111 B. 1111111111111111111111111111111 C. 01111111111111111111111111111111 D. 10000000000000000000000000000000 经典面试题3 System.out.println(~-55); 如上代码的运算结果: ( 54 ) System.out.println(~-230); 如上代码的运算结果: ( 229 ) System.out.println(~55); 如上代码的运算结果: ( -56 ) 16进制 16进制是2进制的简写形式 2进制运算 1. ~ 取反运算 2. & 与运算(逻辑乘法运算规则: 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 与运算用途: n: 00010100 11010111 01010001 11101010 m: 00000000 00000000 00000000 11111111
航空航天大学 课 程 设 计 报 告 课程设计名称:计机组成原理课程设计 课程设计题目:阵列乘法器的设计与实现 院(系):计机学院 专 业:计机科学与技术 班 级: 学 号: 姓 名: 指导教师: 完成日期:2014年1月10日 目 录 第1章 总体设计方案 1 1.1 设计原理 1 1.2 设计思路 2 1.3 设计环境 3 第2章 详细设计方案 3 2.1 总体方案的设计与实现 4 2.1.1总体方案的逻辑图 4 2.1.2器件的选择与引脚锁定 4 2.1.3编译、综合、适配 5 2.2功能模块的设计与实现 5 2.2.1 一位全加器的设计与实现 6 2.2.2 4位输入端加法器的设计与实现 7 2.2.3 阵列乘法器的设计与实现 10 第3章 硬件测试 13 3.1 编程下载 13 3.2 硬件测试及结果分析 13 参考文献 15 附 录(电路原理图) 16 第1章 总体设计方案 1.1 设计原理 阵列乘法器采用类似人工计的方法进行乘法运算。人工计方法是用乘数的每一位去 乘被乘数,然后将每一位权值对应相加得出每一位的最终结果。如图1.1所示,用乘数的 每一位直接去乘被乘数得到部分积并按位列为一行,每一行部分积末位与对应的乘数数 位对齐,体现对应数位的权值。将各次部分积求和,即将各次部分积的对应数位求和即 得到最终乘积的对应数位的权值。 为了进一步提高乘法运算速度,可采用大规模的阵列乘法器来实现,阵列乘法器的乘 数与被乘数都是二进制数。可以通过乘数从最后一位起一个一个和被乘数相与,自第二 位起要依次向左移一位,形成一个阵列的形式。这就可将其看成一个全加的过程,将乘 数某位与被乘数某位与完的结果加上乘数某位的下一位与被乘数某位的下一位与完的结 果再加上前一列的进位进而得出每一位的结果,假设被乘数与乘数的位数均为4位二进制 数,即m=n=4,A×B可用如下竖式出,如图1.1所示。 X4 X3 X2 X1 =A × Y4 Y3 Y2 Y1 =B X4Y1 X3Y1 X2Y1 X1Y1 X4Y2 X3Y2 X2Y2 X1Y2 X4Y3 X3Y3 X2Y3 X1Y3 (进位) X4Y4 X3Y4 X2Y4 X1Y4 Z8 Z7 Z6 Z5 Z4 Z3 Z2 Z1 图1.1 A×B计竖式 X4 ,X3 ,X2 ,X1 ,Y4 ,Y3 ,Y2 ,Y1为阵列乘法器的输入端,Z1- Z8为阵列乘法器的输出端,该逻辑框图所要完成的功能是 实现两个四位二进制既A(X)*B(Y)的乘法运算,其计结果为C(Z) (其中A(X)=X4X3X2X1 ,B(Y)=Y4Y3Y2Y1,C(Z)=Z8Z7Z6Z5Z4Z3Z2Z1而且输入和输出结果均用二进制表示 )。阵列乘法器的总原理如图1.2所示。 图1.2 阵列器的总原理图 2 设计思路 (1)整体部分:阵列乘法器采用的是先逐位求解部分积,本课程设计要完成X与Y的乘法 运算(X=X4X3X2X1,Y=Y4Y3Y2Y1), 采用自上而下的设计方法,顶层设计采用8输入和8输出的一个自设置芯片,芯片部封装 16个模块,构成4×4的乘法阵列,如图1.3所示,阵列的每一行送入乘数Y的每一位数位, 而各行错开形成的每一斜列则送入被乘数的每一数位。 图 1.3 阵列乘法器4×4阵列 单元部分:设计整体框图中的每一个细胞模块实现的功能是计部分积和向高位的进位 。 (3)仿真部分:将整个电路连接好以后即可进行仿真,用以验证设计是否正确。主 要需要仿真的部分有:一位全加器、4输入加法器以及整体电路图。 (4)采用硬件描述语言进行电路设计并实现给定的功能,设计的原理图经编译、调 试后形成*.bit文件并下载到XCV200可编程逻辑芯片中,经硬件测试验证设计的正确性。 阵列乘法器是由十六个模块组成,每一个模块构包括一个与门和一位全加器。具体的各 个模块的设计在模块设计中一一呈现。 1.3 设计环境 (1)硬件坏境:伟福COP2000型计机组成原理实验仪、XCV200实验板、微机。具体 容如下: COP2000实验仪:COP2000计机组成原理实验系统由实验平台、开关电源、软件三大 部分组成实验平台上有寄存器组R0- R3、运算单元、累加器A、暂存器B、直通/左移/右移单元、地址寄存器、程序计数器、 堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制 器、组合逻辑控制器、扩展座、总线插孔区、微动开关/指示灯、逻辑笔、脉冲源、20个 按键、字符式LCD、RS232口。 XCV200实验板:在COP2000 实验仪中的FPGA 实验板主要用于设计性实验和课程设计实验,它的核心器件是20 万门XCV200 的FPGA 芯片。用FPGA 实验板可设计8 位16 位和32 位模型机 (2)软
DSEG SEGMENT STR1 DB 0AH,0DH, '********************************************$' STR2 DB 0AH,0DH, '** **$' STR3 DB 0AH,0DH, '** welcome you ! **$' STR4 DB 0AH,0DH, '** **$' STR5 DB 0AH,0DH, '** this is programme of sizeyunshuan **$' STR6 db 0AH,0DH, '** **$' STR7 db 0AH,0DH, '** rang(-32768 to 32767) **$' STR8 DB 0AH,0DH, '** press p to exit ! **$' STR9 DB 0AH,0DH, '** maker:fishosoul·yu **$' STR10 DB 0AH,0DH, '********************************************',0AH,0DH,'$' SIGN1 DW 0 ;判断数字是否输入完毕 SIGN2 DW 0 ;判断括号是否配对 SIGN3 DW 0 ; NUMB DW 20H DUP(0) ;保存输入的数值 MARK DB 'A' ;保存输入的运算符 DB 10H DUP(0) ; ERROR DB 'YOUR INPUT ARE WRONG$' DSEG ENDS DISP MACRO M LEA DX,M MOV AH,9 INT 21H ENDM CHOICE MACRO ASC1,HAO1,HH ;宏定义,给运算符赋权值 CMP AL,ASC1 ; JNE OTHER&HAO1 ; MOV CH,HH ; JMP OTHER7 ; ENDM CSEG SEGMENT ; ASSUME CS:CSEG,DS:DSEG START: CALL CLEAR MOV AX,DSEG ; MOV DS,AX ; LEA DI,NUMB ; LEA SI,MARK ; DISP STR1 DISP STR3 DISP STR4 DISP STR5 DISP STR6 DISP STR7 DISP STR8 DISP STR9 DISP STR10 ;CALL CLEAR CALL CR ;disp error MOV AX,0 MOV DX,0 MOV BX,0 MOV CX,0 STA1 : CALL CR INPUT: MOV AH,1 ; INT 21H ; CMP AL,'P' JE J_SHU0 CMP AL,'p' JE J_SHU0 CMP AL,'=' ; JE PD ;是等号,进一步判断输入括号是否配对 CMP AL,28H ; JB INPUT ; CMP AL,39H ; JA INPUT ; CMP AL,2FH ;判断是数字还是符号 JBE JUD ;是符号转入响应操作 INC WORD PTR SIGN1 ;将数字标志位加一 SUB AL,30H ;将asc码转16进制 MOV AH,0 ; XCHG AX,[DI] ; MOV BX,10 ; MUL BX ; XCHG AX,[DI] ; ADD [DI],AX ; JMP INPUT ; PD: CMP WORD PTR SIGN2,0 ;判断配对标志位 JE JUD ; JMP BC ; JUD: CMP WORD PTR SIGN1,0 ;判断数值指针是否已经下移一位 JE FUH1 ; ADD DI,2 ; MOV WORD PTR SIGN1,0; FUH1: CALL ADVANCE ;判定优先级, CMP CH,5 ;判断输入的是否是左括号 JNE PY ;不是则判断输入的是否是右括号 INC WORD PTR SIGN2 ;是左括号,括号标志位1 MOV WORD PTR SIGN3,1; PY: CMP CH,1 ;判断输入的是否是右括号 JNE AGAIN ; DEC WORD PTR SIGN2 ;是右括号,括号标志位减1 AGAIN: CMP BYTE PTR[SI],'A';判断运算符存储区是否为空 JE SAVE ; CMP CH,[SI] ; JA SAVE ; CMP BYTE PTR[SI],'(' JNE YIDO DEC SI JMP INPUT YIDO: DEC SI ; MOV CL,[SI] ; CALL MATCH ;判断是什么运算符并进行相应的计 ;DEC SI ; JMP AGAIN ; Z_Z: JMP INPUT J_SHU0: JMP J_SHU ; SAVE: CMP CH,0 ; JE OVER1 ; CMP CH,1 ; JE Z_Z ;“)”不保存,输入下一个数 INC SI ; MOV [SI],AL ; INC SI ; CMP CH,5 ; JNE GO_ON ; MOV CH,2 ;改变(的权值 GO_ON: MOV [SI],CH ; JMP INPUT ; BC: LEA DX,ERROR ; MOV AH,9 ; INT 21H ; JMP J_SHU ; OVER1: JMP OVER ; MATCH PROC ;子程序,进行相应的运算 PUSH AX ; XOR AX,AX XOR BX,BX CMP CL,2AH ;乘法运算 JNE NEXT1 SUB DI,2 XCHG BX,[DI] SUB DI,2 XCHG AX,[DI] IMUL BX MOV [DI],AX ADD DI,2 JMP FINISH NEXT1: CMP CL,2FH ;除法运算 JNE NEXT2 SUB DI,2 XCHG BX,[DI] SUB DI,2 XCHG AX,[DI] CWD IDIV BX MOV [DI],AX ADD DI,2 JMP FINISH NEXT2: CMP CL,2BH ;加法运算 JNE NEXT3 SUB DI,2 XCHG BX,[DI] SUB DI,2 ADD [DI],BX ADD DI,2 JMP FINISH NEXT3: CMP CL,2DH ;减法运算 JNE FINISH SUB DI,2 XCHG BX,[DI] SUB DI,2 SUB [DI],BX ADD DI,2 FINISH: POP AX RET MATCH ENDP ADVANCE PROC CHOICE 28H,1,5 ;( OTHER1: CHOICE 29H,2,1 ;) OTHER2: CHOICE 2AH,3,4 ;* OTHER3: CHOICE 2FH,4,4 ;/ OTHER4: CHOICE 2BH,5,3 ;+ OTHER5: CHOICE 2DH,6,3 ;- OTHER6: CHOICE 3DH,7,0 ;= OTHER7: RET ADVANCE ENDP ;***清屏*** clear proc near push ax push bx push cx push dx mov ah,06h mov al,00h mov ch,0 mov cl,0 mov bh,0fH mov dh,18H
### 回答1: 16进制数可以直接参与运算。在计机中,16进制数是一种常见的数据表示方法,因为它可以更直观地表示二进制数,同时也比十进制数更紧凑。在计机中,可以对16进制数进行加、减、乘、除等基本运算,而且这些运算都可以直接转换为二进制数进行计。 ### 回答2: 16进制数是一种表示数字的方式,它使用基数为16的系统,其中包含0-9和A-F共16个符号来表示数值。它和10进制数(使用基数为10)或2进制数(使用基数为2)一样,都可以参与各种数值运算。 在计机科学和编程领域,我们经常使用16进制数来表示二进制数的编码,特别是在处理底层数据时。例如,一个8位二进制数可以用两位的16进制数来表示,这样更加简洁和方便阅读。 16进制数在参与运算时,可以直接进行加法、减法和乘法等基本运算。在这些运算中,16进制数的加法和减法规则与10进制数相同,而乘法规则稍有不同。 另外,在计机中,16进制数还常用于表示内存和寄存器地址,以及颜色代码和字符编码等。在这些应用场景中,16进制数的运算和转换是非常重要的。 总结起来,16进制数可以直接参与各种数值运算,包括基本的加法、减法和乘法等。对于计机科学和编程来说,16进制数的处理是必不可少的一部分,它在底层数据和编码方面发挥了重要的作用。 ### 回答3: 16进制数可以直接参与一些运算,例如加法和减法。 在加法运算中,我们可以将两个16进制数相加。例如,如果我们有两个16进制数A和B,我们可以将A和B的每一位相加,并记住进位。如果相加的结果超过了9,我们可以使用A~F来表示10~15。这样,我们就可以得到一个对应的16进制数作为结果。 在减法运算中,我们可以将两个16进制数相减。同样地,我们可以将A和B的每一位相减,并在需要时向高位借位。如果相减的结果为负数,则需要向高位借位。如果借位时出现了借位不够的情况,则需要向更高位借位。最后,我们得到的结果也是一个对应的16进制数。 16进制数参与其他一些运算,例如乘法和除法时,通常需要将16进制数转换为其他进制进行计,然后再将结果转换回16进制数。 总之,16进制数可以直接参与加法和减法运算,但在涉及乘法和除法等其他运算时,通常需要转换为其他进制进行计

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值