精华内容
下载资源
问答
  • 二进制相乘 分治法 C语言实现 优化了二进制的乘法 是的时间复杂度降低了
  • 用乘法指令实现32位二进制数与16位二进制相乘,最后在屏幕上输出结果。悬赏分:50 - 解决时间:2009-12-14 09:23 最佳答案:;--------------------完整的程序如下。DATA SEGMENT;A中第一个字存高16位被乘数,第二...

    用乘法指令实现32位二进制数与16位二进制数相乘,最后在屏幕上输出结果。

    悬赏分:50 - 解决时间:2009-12-14 09:23

    最佳答案:

    ;--------------------

    完整的程序如下。

    DATA SEGMENT

    ;A中第一个字存高16位被乘数,第二个字存低16位被乘数

    ;B中存16位乘数

    ;CDE存结果,C存32位到47位,D存16位到31位,E存0位到15位

        A DW 1111H, 2222H

        B DW 3333H

        C DW ?

        D DW ?

        E DW ?

        F DB 0, 0, 0, 0, 0, 0, 0, 0    ;存放BCD码

    DATA ENDS

    ;--------------------

    CODE SEGMENT

    ASSUME CS:CODE, DS:DATA

    START:

          MOV AX, DATA

           MOV DS, AX

           MOV AX, [A+2]

           MOV BX, [B]

           MUL BX

           MOV [D], DX

           MOV [E], AX

           MOV AX, [A]

           MUL BX

           MOV [C], DX

           ADD [D], AX

           ADC [C], 0

    ;---------------以上是“一般般拉风”编写的乘法部分------------

    ;---------------------------以下是做而论道编写的输出部分-----

           MOV CX, 48              ; 48位数变换成BCD码

    _L1_:

           XOR AX, AX

           MOV AX, [E]

           ADD AX, AX

           MOV [E], AX

           MOV AX, [D]

           ADC AX, AX

           MOV [D], AX

           MOV AX, [C]

           ADC AX, AX

           MOV [C], AX

           LEA SI, F+7

           PUSH CX

           MOV CX, 8

    _L2_:

           MOV AL, [SI]

           ADC AL, AL

           DAA

           MOV [SI], AL

           DEC SI

           LOOP _L2_

           POP CX

           LOOP _L1_

    ;---------------------------以下是显示BCD码------------

           LEA SI, F

           MOV CX, 8

    _L3_:

           MOV AL, [SI]

           MOV AH, 0

           MOV DL, 16

           DIV DL

           MOV DL, AL

           AND DL, 0FH

           ADD DL, 30H

           MOV AH, 02H

           INT 21H

           MOV DL, [SI]

           AND DL, 0FH

           ADD DL, 30H

           MOV AH, 02H

           INT 21H

           INC SI

           LOOP _L3_

           MOV AH, 4CH

           INT 21H

    CODE ENDS

    END START

    ;------------------------------------------------

    ;本程序进行了如下乘法:

    ;11112222H × 3333H = 0369 D036 92C6H

    ;应该显示如下结果:

    ;00 03 75 29 99 68 68 54

    ;------------------------------------------------

    参考资料:一般般拉风 的回答。

    回答者:    做而论道 - 十一级   2009-12-14 01:38

    ;------------------------------------------------

    提问者对于答案的评价:相当感谢

    ;------------------------------------------------

    其他回答    共 2 条

    程序(略)

    回答者: 一般般拉风 - 三级   2009-12-13 13:33

    此题难点,恰在输出结果。

    回答者: -------- 十四级 2009-12-13 17:45

    ;------------------------------------------------

    原文网址:http://zhidao.baidu.com/question/129169219.html

    展开全文
  • 三星9454实现两个无符号的八位二进制相乘
  • 2、实验内容:从键盘输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数。 3、实验要求: (1)在屏幕提示:“please input the first number(0–99): ”后,输入一个0–99之间...

    实验7:数值运算与数据输出

    1、实验目的:掌握通过键盘输入接收字符串、乘法运算、2/16进制数与ASCII码之间相互转换以及数据显示输出的程序设计方法。
    2、实验内容:从键盘输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数。
    3、实验要求
    (1)在屏幕提示:“please input the first number(0–99): ”后,输入一个0–99之间的整数。
    若所输入的数不在此范围内,或输入其它字符,则屏幕提示:“input an invalid number, input again!”;
    (2)在屏幕提示:“please input the second number(0–99): ”后,输入一个0–99之间的整数。
    若所输入的数不在此范围内,或输入其它字符,则屏幕提示:“input an invalid number, input again!”。
    (3)对2个整数做乘法运算。
    (4)在屏幕上显示出乘积所对应的二进制和十六进制数;
    (5)显示部分功能要求用子程序实现。

    直接上代码了

    DATAS SEGMENT
        string1 db 0aH,'please input the first number(0-99):',0ah,'$'
        string2 db 0ah,'please input the second number(0-99):',0ah,'$'
        string3 db 0ah,'input an invalid number,input again:',0ah,'$'
        x1 db 8,?,8 dup(?)
        x2 db 8,?,8 dup(?)
        num1 dw ?
        num2 dw ?
        num  dw ?
        table DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
              DB 41H,42H,43H,44H,45H,46H,47H,48H,49H,4AH,4BH,4CH,4DH,4EH,4FH,50H,51H,52H
              DB 53H,54H,55H,56H,57H,58H,59H,5AH 
        ;此处输入数据段代码  
    DATAS ENDS
    
    STACKS SEGMENT
        db 8 dup(?)
        ;此处输入堆栈段代码
    STACKS ENDS
    
    CODES SEGMENT
        ASSUME CS:CODES,DS:DATAS,SS:STACKS
    START:
        MOV AX,DATAS
        MOV DS,AX
        mov dx,offset string1
        mov ah,09h
        int 21h
        ;input the number1
        mov  dx,offset x1
        mov  ah,0ah
        int  21h
        jmp  compire1
    again1:
        lea dx,string3
        mov ah,09h
        int 21h
        mov  dx,offset x1
        mov  al,00h
        mov  x1[4],al
        mov  ah,0ah
        int  21h
    compire1:
        ;inspect the number1
        xor al,al
        mov al,x1[2]
        cmp al,'-'
        jz  again1
        cmp al,'9'
        jnbe again1
        mov al,x1[3]
        cmp al,'9'
        jnbe again1
        mov al,x1[4]
        cmp al,'0'
        jnb again1
        ;show the second tip
        mov dx,offset string2
        mov ah,09h
        int 21h
        ;input the numebr2
        mov  dx,offset x2
        mov  ah,0ah
        int  21h
        jmp  compire2
    again2:
        lea dx,string3
        mov ah,09
        int 21h
        mov  dx,offset x2
        mov  al,00h
        mov  x2[4],al
        mov  ah,0ah
        int  21h
    compire2:
        xor al,al
        mov al,x2[2]
        cmp al,'-'
        jz  again2
        cmp al,'9'
        jnbe again2
        mov al,x2[3]
        cmp al,'9'
        jnbe again2
        mov al,x2[4]
        cmp al,'0'
        jnb again2
        ;begin to mul the two numbers
        xor ax,ax
        mov bl,10
        mov al,x1[2]
        sub al,30h
        mov cl,x1[3]
        cmp cl,0dh
        jz  non1_
        ;cmp cl,0
        ;jnz sub1
        ;jz  non1
    sub1:
        mul bl
        sub cl,30h
        jmp non1
    non1_:
        mov cl,0
    non1:
        add al,cl
        mov num1,ax
        xor ax,ax
        mov al,x2[2]
        sub al,30h
        mov cl,x2[3]
        cmp cl,0dh
        jz  non2_
        ;cmp cl,0
        ;jnz sub2    
        ;jz  non2
    sub2:
        mul bl
        sub cl,30h
        jmp non2
    non2_:
        mov cl,0
    non2:
        add al,cl
        mov num2,ax
        
        xor bx,bx
        xor ax,ax
        mov ax,num1
        mov bx,num2
        mul bx
        mov num,ax
        mov bx,offset table
        call print_H
        call print_B
        ;此处输入代码段代码
        MOV AH,4CH
        INT 21H
    print_H proc near
        push ax
        push cx
        push dx
        mov dl,0ah
        mov ah,02h
        int 21h
        mov ax,num
        xor cx,cx
        mov cl,4
        mov al,ah
        shr al,cl
        
        xlat
        mov dl,al
        mov ah,02h
        int 21h
        mov ax,num
        mov al,ah
        and al,0fh
        xlat
        mov dl,al
        mov ah,02h
        int 21h
        mov ax,num
        shr al,cl
        xlat
        mov dl,al
        mov ah,02h
        int 21h
        mov ax,num
        and al,0fh
        xlat
        mov dl,al
        mov ah,02h
        int 21h
        mov dl,'H'
        int 21h
        mov dl,0ah
        int 21h
        pop dx
        pop cx
        pop ax
        ret
    print_H endp
    
    print_B proc near
        push ax
        push bx
        push cx
        push dx
        xor bx,bx
        mov ax,num
        mov bl,ah
        mov cx,8
    s1:
        mov dl,30h
        shl bl,1
        adc dl,0
        mov ah,02h
        int 21h
        loop s1
        
        mov ax,num
        mov bl,al
        mov cx,8
    s2:
        mov dl,30h
        shl bl,1
        adc dl,0
        mov ah,02h
        int 21h
        loop s2
        mov dl,'B'
        int 21h 
        pop ax
        pop bx
        pop cx
        pop dx
        ret
    print_B endp
    CODES ENDS
        END START
    
    展开全文
  • 二进制数,错位相乘

    2019-09-24 14:22:50
    给出一个二进制数的位数为N位(N < 100),二进制数的值是多少不确定,给定一个数 Y (Y < 100) , 使得从左边起,第一位 * 第二位 + 第二位 * 第三位 + 第三位 * 第四位 …… + 第 N - 1 位 * 第 N 位 = Y ...

      给出一个二进制数的位数为N位(N < 100),二进制数的值是多少不确定,给定一个数 Y (Y < 100) , 使得从左边起,第一位 * 第二位 + 第二位 * 第三位 + 第三位 * 第四位 …… + 第 N - 1 位 * 第 N 位  = Y 成立 ,求出满足等式的二进制数有多少个;

      下面给出我的思考过程:

      由于 N 和 Y 都是不确定的,并且二进制数的最后一位是 0 或 1 ,所以假设 dp[ i ][ j ][ 0 ] 代表 Y = i , N = j , 即 二进制的位数为 j , 给定的数为 i ,且第 N 位 为 0 ,满足条件的二进制数的个数;  dp[ i ][ j ][ 1 ] 代表 Y = i , N = j ,即二进制的位数为 j , 给定的数为 i ,且第 N 位 为 1 ,满足条件的二进制的个数 ;

      首先将数组dp赋初始值为: 0  , dp[100][100][2] = {0} ;

      假设二进制数只有一位,则 :

      dp[ 0 ][ 1 ][ 0 ] = 1 ;

      dp[ 0 ][ 1 ][ 1 ] = 1 ;  

      给定的值从1开始到100,每一个给定的值都对应二进制的位数从2到100 ;

      给定值为 0 时,dp[ 0 ][ 2 ][ 0 ] = dp[ 0 ][ 1 ][ 0 ] + dp[ 0 ][ 1 ][ 1 ]

              dp[ 0 ][ 2 ][ 1 ] = dp[ 0 ][ 1 ][ 0 ]

              dp[ 0 ][ 3 ][ 0 ] = dp[ 0 ][ 2 ][ 0 ] + dp[ 0 ][ 2 ][ 1 ]

              dp[ 0 ][ 3 ][ 1 ] = dp[ 0 ][ 2 ][ 0 ]

              ………………

             dp[ 0 ][ 100 ][ 0 ] = dp[ 0 ][ 99 ][ 0 ] + dp[ 0 ][ 99 ][ 1 ]

             dp[ 0 ][ 100 ][ 1 ] = dp[ 0 ][ 99 ][ 0 ]

        

      给定值为 1 时,dp[ 1 ][ 2 ][ 0 ] = dp[ 1 ][ 1 ][ 0 ] + dp[ 1 ][ 1 ][ 1 ]

              dp[ 1 ][ 2 ][ 1 ] = dp[ 1 ][ 1 ][ 0 ] + dp[ 0 ][ 1 ][ 1 ]

              dp[ 1 ][ 3 ][ 0 ] = dp[ 1 ][ 2 ][ 0 ] + dp[ 1 ][ 2 ][ 1 ]

              dp[ 1 ][ 3 ][ 1 ] = dp[ 1 ][ 2 ][ 0 ] + dp[ 0 ][ 2 ][ 1 ]

             ……………………

             dp[ 1 ][ 100 ][ 0 ] = dp[ 1 ][ 99 ][ 0 ] + dp[ 1 ][ 99 ][ 1 ]

             dp[ 1 ][ 100 ][ 1 ] = dp[ 1 ][ 99 ][ 0 ] + dp[ 0 ][ 99 ][ 1 ]

     

      给定值为 2 时,dp[ 2 ][ 2 ][ 0 ] = dp[ 2 ][ 1 ][ 0 ] + dp[ 2 ][ 1 ][ 1 ]

              dp[ 2 ][ 2 ][ 1 ] = dp[ 2 ][ 1 ][ 0 ] + dp[ 1 ][ 1 ][ 1 ]

              dp[ 2 ][ 3 ][ 0 ] = dp[ 2 ][ 2 ][ 0 ] + dp[ 2 ][ 2 ][ 1 ]

                dp[ 2 ][ 3 ][ 1 ] = dp[ 2 ][ 2 ][ 0 ] + dp[ 1 ][ 2 ][ 1 ]

                ……………………

              dp[ 2 ][ 100 ][ 0 ] = dp[ 2 ][ 99 ][ 0 ] + dp[ 2 ][ 99 ][ 1 ] 

                dp[ 2 ][ 100 ][ 1 ] = dp[ 2 ][ 99 ][ 0 ] + dp[ 1 ][ 99 ][ 1 ]

     

      ………………

     

      给定值为100时,dp[ 100 ][ 2 ][ 0 ] = dp[ 100 ][ 1 ][ 0 ] + dp[ 100 ][ 1 ][ 1 ]

               dp[ 100 ][ 2 ][ 1 ] = dp[ 100 ][ 1 ][ 0 ] + dp[ 99 ][ 1 ][ 1 ]

               dp[ 100 ][ 3 ][ 0 ] = dp[ 100 ][ 2 ][ 0 ] + dp[ 100 ][ 2 ][ 1 ]

                 dp[ 100 ][ 3 ][ 1 ] = dp[ 100 ][ 2 ][ 0 ] + dp[ 99 ][ 2 ][ 1 ]

                ……………………

              dp[ 100 ][ 100 ][ 0 ] = dp[ 100 ][ 99 ][ 0 ] + dp[ 100 ][ 99 ][ 1 ] 

                dp[ 100 ][ 100 ][ 1 ] = dp[ 100 ][ 99 ][ 0 ] + dp[ 99 ][ 99 ][ 1 ]

     

    当输入N 和 Y 时 , 输出dp[ Y ][ N ][ 0 ] + dp[ Y ][ N ][ 1 ] 即为二进制数的个数;

     

    下面给出相应思路的代码:

    #include<iostream>
    using namespace std ;
    int main()	{
    	int  i ; 
    	int dp[110][110][2] = {0} ;
    	dp[0][1][0] = 1 ;
    	dp[0][1][1] = 1 ;
    	for(i = 2 ; i <= 100 ; i++)	{
    		dp[0][i][0] = dp[0][i-1][0] + dp[0][i-1][1] ;
    		dp[0][i][1] = dp[0][i-1][0] ;
    	}
    	for(i = 1 ; i <= 100 ; i++)
    		for(int j = 2 ; j <= 100 ; j++)		{
    			dp[i][j][0] = dp[i][j-1][0] + dp[i][j-1][1] ;
    			dp[i][j][1] = dp[i][j-1][0] + dp[i-1][j-1][1] ;
    		}
    	int N ;
    	cin >> N ;
    	while(N--)	{
    		int n , y ;
    		cin >> n >> y ;
    		cout << dp[y][n][0] + dp[y][n][1] << endl ;
    	}
    	return 0 ;
    }
    

      

    转载于:https://www.cnblogs.com/NYNU-ACM/p/4237473.html

    展开全文
  • 二进制如何转十进制,十进制如何转二进制

    万次阅读 多人点赞 2018-04-06 17:57:29
    学计算机的朋友刚开始学习时都要接触进制之间的转换,二进制、十进制、八进制、十六进制等,这个是很枯燥的,转来转去就转蒙圈了,别蒙别蒙,今天咱们一个一个搞定,看看二进制和十进制之间如何相互转换的。 转成...

           学计算机的朋友刚开始学习时都要接触进制之间的转换,二进制、十进制、八进制、十六进制等,这个是很枯燥的,转来转去就转蒙圈了,别蒙别蒙,今天咱们一个一个搞定,看看二进制和十进制之间如何相互转换的。

            转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制;

    1、  正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。

            也就是说,将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就OK咧。哎呀,还是举例说明吧,比如42转换为二进制,如图1所示操作。

                                    

          42除以2得到的余数分别为010101,然后咱们倒着排一下,42所对应二进制就是101010.如图2所示更直观的表达

                                   

           计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,高位补零,所说,如图3所示,42转换成二进制以后就是。00101010,也即规范的写法为(42)10=(00101010)2.赶紧记住吧

                                  

    2、  负整数转换成二进制

            方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后即为:(-42)10=(11010110)2.

                                        

    3、  小数转换为二进制的方法:对小数点以后的数乘以2,有一个结果吧,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。然后把取的整数部分按先后次序排列就OK了,就构成了二进制小数部分的序列,举个例子吧,比如0.125,如图5所示。

                                  

              如果小数的整数部分有大于0的整数时该如何转换呢?如以上整数转换成二进制,小数转换成二进制,然后加在一起就OK了,如图6所示。

                                 

    4、  整数二进制转换为十进制:首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。

            先看首位是0的正整数,补齐位数以后,将二进制中的位数分别将下边对应的值相乘,然后相加得到的就为十进制,比如1010转换为十进制,方法如图7所示。

                                 

    5、若二进制补足位数后首位为1时,就需要先减1,再取反再换算:例如,11101011,首位为1,那么就先减1,:11101010,再取反:0001 0101,然后算一下10101对应的十进制为21,所以对应的十进制为-21,方法如图8所示。

                                         

    6、将有小数的二进制转换为十进制时:例如0.1101转换为十进制的方法:将二进制中的四位数分别于下边(如图9所示)对应的值相乘后相加得到的值即为换算后的十进制。

                               

    本文主要参考百度搜索

    https://jingyan.baidu.com/article/597a0643614568312b5243c0.html


    展开全文
  • 001,分别向左右每三位二进制数合成. 或每一位八进制数展成三位二进制数.告诉你一个简单的道理 1.不论什么进制----十进制 都是基数乘位置的次方数 例如: 二进制1010---十进制就是: 1*2^3 0*2^2 1*2^1 0*2^0=10 八...
  • 计算机应用基础二进制.ppt (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!19.90 积分二进制二进制二进制由0和1两种基本数字组成。二进制采用“逢二进一”,或“满2...
  • 二进制数与十进制数的转换 聊二进制数的运算前,我们先看看二进制数的值与十进制数的值是如何相互转换的, 十进制转换成二进制 ...只需将二进制数的各数位的值和位权相乘,然后将相乘的结果相加即可,有木有...
  • 二进制数的运算方法

    万次阅读 多人点赞 2017-08-29 14:12:13
    1.二进制数的算术运算 二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。 (1)二进制数的加法 根据“逢二进一”规则,二进制数加法的法则为: 0+0=0 0+1=1+0=1 1+1=0 (进位为1)...
  • 虽然很早就接触了二进制,却一直没有正视这个问题,阅读《计算机科学导论》的时候,基本上是跳过了这一部分,总是以“这么基础的东西,反正工作中基本用不上”的理由给搪塞过去。最近正在阅读《编码》和《程序员的...
  • 二进制和十进制之间的转换.ppt》由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关《二进制和十进制之间的转换.ppt》文档请在天天文库搜索。1、计算机中的十进制与二进制的转换【 课 题 】 ...
  • 简述二进制

    2019-11-03 10:36:28
    1.二进制 1.1二进制的由来 17世纪至18世纪的德国数学家莱布尼茨,是世界上第一个提出二进制记数法的人。他对帕斯卡的加法器进行了改进,设计并制造了一种手摇的演算机,提出了他认为吻合中国“先天八卦”的二进制,...
  • 转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制; 1、 正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。 也就是说,将正的十进制数除以二,得到的商再...
  • 《趣味数学计算机中数据的存储二进制》由会员分享,可在线阅读,更多相关《趣味数学计算机中数据的存储二进制(29页珍藏版)》请在人人文库网上搜索。1、计算机中的数学,计算机中数据的表示,众所周知,所有的数据在...
  • 学计算机的朋友刚开始学习时都要接触进制之间的转换,二进制、十进制、八进制、十六进制等,这个是很枯燥的,转来转去就转蒙圈了,别蒙别蒙,今天咱们一个一个搞定,看看二进制和十进制之间如何相互转换的。...
  • 文档介绍:趣味数学计算机中数据的存储二进制.ppt计算机中的数学计算机中数据的表示众所周知,所有的数据在计算机内部都是以二进制表示的。我们今天的任务,就是研究二进制、十进制、八进制及十六进制之间的关系。...
  • 二进制

    千次阅读 2019-04-02 09:11:00
    二进制是计算技术中广泛采用的一种数制。 二进制数据是用0和1两个数码来表示的数。 二进制的表现形式 计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0...
  • 二进制补码乘法除法 1)二进制乘法 (1) Binary Multiplication) ... 二进制数可以使用两种方法相乘, Paper method: Paper method is similar to multiplication of decimal numbers on paper. ...
  • 转成二进制主要有以下几种:正整数转二进制,负整数转二进制,小数转二进制; 1、 正整数转成二进制。要点一定一定要记住哈:除二取余,然后倒序排列,高位补零。  也就是说,将正的十进制数除以二,得到的商再...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,622
精华内容 11,448
关键字:

二进制怎么相乘