鱼C论坛

 找回密码
 立即注册
查看: 4778|回复: 6

如何快速计算出一个数是2的多少次方?

[复制链接]
发表于 2012-5-30 05:28:38 | 显示全部楼层 |阅读模式
1鱼币
如题,求解!

需要过程详细点,谢谢!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-30 07:30:59 | 显示全部楼层
话说有库函数可以用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-30 08:51:47 | 显示全部楼层
移位吧,速度快!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-30 09:30:49 | 显示全部楼层
最快的速度肯定是查表,空间换时间,3#移位的方式对2^N有效,3^N次就要复杂很多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-5-30 09:41:55 | 显示全部楼层
assume cs:code,ds:data

data segment
 ;结果保存表,以此类推可以扩展或演变为3^N次方
dwPowerTable    dd  0001h,0002h,0004h,0008h,0010h,0020h,0040h,0080h
                dd  0100h,0200h,0400h,0800h,1000h,2000h,4000h,8000h
                dd  00010000h,00020000h,00040000h,00080000h
                dd  00100000h,00200000h,00400000h,00800000h
                dd  01000000h,02000000h,04000000h,08000000h
                dd  10000000h,20000000h,40000000h,80000000h
data ends


code segment

start:  mov ax,data
        mov ds,ax
        
        mov bx,15   ;要求2的次方,可以自己设定,这里举个例子
        shl bx,2    ;寻找偏移表,一个结果占4个字节
                    ;2^15次方对应的是第60个 
                    
        mov ax,ds:dwPowerTable[bx]    ;求得结果,ax保存低位
        mov dx,ds:dwPowerTable[bx+2]  ;DX保存高16位
        
        mov ax,4c00h
        int 21h    
    
code ends

    end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-2 20:54:13 | 显示全部楼层
不断的乘以啊!输入乘以本身的次数就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-22 10:05:52 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 02:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表