打印

**,实在是强啊…………小弟我佩服佩服~~~!

[复制链接]
7274|65
手机看帖
扫描二维码
随时随地手机跟帖
沙发
耕在此行| | 2008-12-12 14:57 | 只看该作者

这个程序不难

使用特权

评论回复
板凳
ztzer|  楼主 | 2008-12-12 15:03 | 只看该作者

回复2楼

也许对你们身经百战的工程师们是不难,是我涉世太浅,想了大半天,还是没有思路。肯请你不吝赐教。

使用特权

评论回复
地板
dspjs| | 2008-12-12 15:14 | 只看该作者

RE

我也是初学的。有个很笨很笨的想法:
现判断这个数是不是:0000 0000,0000 0001,0000 0011, 0000 0111,0000 1111, 0001 1111, 0011 1111, 0111 1111, 1111 1111, 1000 0000,1100 0000,1110 0000, 1111 0000, 1111 1000, 1111 1100, 1111 1110?也就是两端是否有1.有可能有更好的方法,期待...

然后 MOV A,direct
     XRL A,#0FFH
     ORL A,direct


新手学习中,拍两砖。

使用特权

评论回复
5
ztzer|  楼主 | 2008-12-12 15:18 | 只看该作者

RE四楼

你这方法也不行。你想判断八位就得用到255次判断。可我实际用的时候是12位的。那程序写到哪去了都?

使用特权

评论回复
6
xwj| | 2008-12-12 15:20 | 只看该作者

最快的方法: 做个256字节的表,直接获得答案

否则就逐位扫描吧

LS 的方法有BUG哦,而且也不见得快

使用特权

评论回复
7
ztzer|  楼主 | 2008-12-12 15:22 | 只看该作者

楼上的也不好

如果我数是12位的呢。比如 110011000000 转换成 111111000000,这怎么办?也写个表?

使用特权

评论回复
8
dspjs| | 2008-12-12 15:28 | 只看该作者

会LZ

错了,忽略了许多数据。抱歉。

使用特权

评论回复
9
ljm810010| | 2008-12-12 15:43 | 只看该作者

程序很长,不过应该可以用,请hotpwoer和dengm出招吧

数据先放在A中,B为转换后结果
    MOV  B,#11111111B
SHL:PUSH ACC
    MOV  R7,#80H
LP1:RLC  A
    JC   SHR
    XCH  A,R7
    XRL  B,A
    RR   A
    XCH  A,R7
    CJNE R7,#80H,LP1
SHR:POP  ACC
    MOV  R7,#01H
LP2:RRC  A
    JC   RTN
    XCH  A,R7
    XRL  B,A
    RL   A
    XCH  A,R7
    CJNE R7,#01H,LP2
RTN:RET

使用特权

评论回复
10
耕在此行| | 2008-12-12 16:11 | 只看该作者

我再说说

试了一下,感觉还是用流程图说起来方便点。
不过先点下:
1    先从最低位开始检测直到测到1,置标志,并记下为第几位。
2    再往高位测,测到0,则记下前一位(为1)
3    再往高位测,测到1,补齐中间0位。
4    再往高位测,如2 3步。
具体编程时可用循环方式,有多少位,没多少次。在由0变1与1变为时作相应处理。
如果还不大明白,晚上我再上流程图。

使用特权

评论回复
11
ljm810010| | 2008-12-12 16:24 | 只看该作者

9楼的程序看不清?

先把结果填充全1,右望,遇到0,把结果对应的位清零,直到遇到1,停止;
同理,左望,遇到0,把结果对应的位清零,直到遇到1,停止;
左望右望完了,就可以输出结果。
                 
    填充全1: 1 1 1 1 1 1 1 1 

 右望  -->     0 0 1 0 1 0 1 0     <--  左望

       结果: 0 0 1 1 1 1 1 0

使用特权

评论回复
12
xwj| | 2008-12-12 17:19 | 只看该作者

没事干给你写个程序:


// test25.cpp : Defines the entry point for the console application.
//51的话把bool替换成bit

//

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"

#define CHANG_LONG  12

unsigned int change(unsigned int n)
{
    unsigned char i;
    unsigned int add=0;
    unsigned int mask=1;
    bool start=0;
    bool need_fill=0;
    
    for(i=0;i<CHANG_LONG;i++)
    {
        if(n&mask)     //i对应位为1
        {
            if(start==0)
            {
                start=1;
            }
            else
            {
                if(need_fill)
                {
                    n |= add;
                    add=0;
                    need_fill=0;
                }
            }
        }
        else            //i对应位为0
        {
            if(start)
            {
                add |= mask;
                need_fill=1;
            }
        }
        mask = (mask<<1)&0xfffe;
    }
    return n;
}   

int main(int argc, char* argv[])
{
    unsigned int i;
    char   s[20];  
     
    for(i=0;i<(1<<CHANG_LONG);i++)
    {
          printf("i=%d, bin= ",i); 
          itoa(i,   s,   2);           //转换成字符串,进制基数为2  
          printf("%s     ",s);         //输出   
 
          printf("end=%d, end_bin= ",change(i)); 
          itoa(change(i),   s,   2);   //转换成字符串,进制基数为2  
          printf("%s  ",s);           //输出   
 
    }
    return 0;
}


//本程序由xwj设计的UltraEdit脚本加亮显示,如需要脚本访问我的Blog 或发送邮件至:xwjfile@21cn.com

使用特权

评论回复
13
xwj| | 2008-12-12 17:23 | 只看该作者

输出结果:

i=0, bin= 0     end=0, end_bin= 0 
i=1, bin= 1     end=1, end_bin= 1 
i=2, bin= 10     end=2, end_bin= 10 
i=3, bin= 11     end=3, end_bin= 11 
i=4, bin= 100     end=4, end_bin= 100 
i=5, bin= 101     end=7, end_bin= 111 
i=6, bin= 110     end=6, end_bin= 110 
i=7, bin= 111     end=7, end_bin= 111 
i=8, bin= 1000     end=8, end_bin= 1000 
i=9, bin= 1001     end=15, end_bin= 1111 
i=10, bin= 1010     end=14, end_bin= 1110 
i=11, bin= 1011     end=15, end_bin= 1111 
i=12, bin= 1100     end=12, end_bin= 1100 
i=13, bin= 1101     end=15, end_bin= 1111 
i=14, bin= 1110     end=14, end_bin= 1110 
i=15, bin= 1111     end=15, end_bin= 1111 
i=16, bin= 10000     end=16, end_bin= 10000 
i=17, bin= 10001     end=31, end_bin= 11111 
i=18, bin= 10010     end=30, end_bin= 11110 
i=19, bin= 10011     end=31, end_bin= 11111 
i=20, bin= 10100     end=28, end_bin= 11100 
i=21, bin= 10101     end=31, end_bin= 11111 
i=22, bin= 10110     end=30, end_bin= 11110 
i=23, bin= 10111     end=31, end_bin= 11111 
i=24, bin= 11000     end=24, end_bin= 11000 
i=25, bin= 11001     end=31, end_bin= 11111 
i=26, bin= 11010     end=30, end_bin= 11110 
i=27, bin= 11011     end=31, end_bin= 11111 
i=28, bin= 11100     end=28, end_bin= 11100 
i=29, bin= 11101     end=31, end_bin= 11111 
i=30, bin= 11110     end=30, end_bin= 11110 
i=31, bin= 11111     end=31, end_bin= 11111 
i=32, bin= 100000     end=32, end_bin= 100000 
i=33, bin= 100001     end=63, end_bin= 111111 
i=34, bin= 100010     end=62, end_bin= 111110 
i=35, bin= 100011     end=63, end_bin= 111111 
i=36, bin= 100100     end=60, end_bin= 111100 
i=37, bin= 100101     end=63, end_bin= 111111 
i=38, bin= 100110     end=62, end_bin= 111110 
i=39, bin= 100111     end=63, end_bin= 111111 
i=40, bin= 101000     end=56, end_bin= 111000 
i=41, bin= 101001     end=63, end_bin= 111111 
i=42, bin= 101010     end=62, end_bin= 111110 
i=43, bin= 101011     end=63, end_bin= 111111 
i=44, bin= 101100     end=60, end_bin= 111100 
i=45, bin= 101101     end=63, end_bin= 111111 
i=46, bin= 101110     end=62, end_bin= 111110 
i=47, bin= 101111     end=63, end_bin= 111111 
i=48, bin= 110000     end=48, end_bin= 110000 
i=49, bin= 110001     end=63, end_bin= 111111 
i=50, bin= 110010     end=62, end_bin= 111110 
i=51, bin= 110011     end=63, end_bin= 111111 
i=52, bin= 110100     end=60, end_bin= 111100 
i=53, bin= 110101     end=63, end_bin= 111111 
i=54, bin= 110110     end=62, end_bin= 111110 
i=55, bin= 110111     end=63, end_bin= 111111 
i=56, bin= 111000     end=56, end_bin= 111000 
i=57, bin= 111001     end=63, end_bin= 111111 
i=58, bin= 111010     end=62, end_bin= 111110 
i=59, bin= 111011     end=63, end_bin= 111111 
i=60, bin= 111100     end=60, end_bin= 111100 
i=61, bin= 111101     end=63, end_bin= 111111 
i=62, bin= 111110     end=62, end_bin= 111110 
i=63, bin= 111111     end=63, end_bin= 111111 
i=64, bin= 1000000     end=64, end_bin= 1000000 
i=65, bin= 1000001     end=127, end_bin= 1111111 
i=66, bin= 1000010     end=126, end_bin= 1111110 
i=67, bin= 1000011     end=127, end_bin= 1111111 
i=68, bin= 1000100     end=124, end_bin= 1111100 
i=69, bin= 1000101     end=127, end_bin= 1111111 
i=70, bin= 1000110     end=126, end_bin= 1111110 
i=71, bin= 1000111     end=127, end_bin= 1111111 
i=72, bin= 1001000     end=120, end_bin= 1111000 
i=73, bin= 1001001     end=127, end_bin= 1111111 
i=74, bin= 1001010     end=126, end_bin= 1111110 
i=75, bin= 1001011     end=127, end_bin= 1111111 
i=76, bin= 1001100     end=124, end_bin= 1111100 
i=77, bin= 1001101     end=127, end_bin= 1111111 
i=78, bin= 1001110     end=126, end_bin= 1111110 
i=79, bin= 1001111     end=127, end_bin= 1111111 
i=80, bin= 1010000     end=112, end_bin= 1110000 
i=81, bin= 1010001     end=127, end_bin= 1111111 
i=82, bin= 1010010     end=126, end_bin= 1111110 
i=83, bin= 1010011     end=127, end_bin= 1111111 
i=84, bin= 1010100     end=124, end_bin= 1111100 
i=85, bin= 1010101     end=127, end_bin= 1111111 
i=86, bin= 1010110     end=126, end_bin= 1111110 
i=87, bin= 1010111     end=127, end_bin= 1111111 
i=88, bin= 1011000     end=120, end_bin= 1111000 
i=89, bin= 1011001     end=127, end_bin= 1111111 
i=90, bin= 1011010     end=126, end_bin= 1111110 
i=91, bin= 1011011     end=127, end_bin= 1111111 
i=92, bin= 1011100     end=124, end_bin= 1111100 
i=93, bin= 1011101     end=127, end_bin= 1111111 
i=94, bin= 1011110     end=126, end_bin= 1111110 
i=95, bin= 1011111     end=127, end_bin= 1111111 
i=96, bin= 1100000     end=96, end_bin= 1100000 
i=97, bin= 1100001     end=127, end_bin= 1111111 
i=98, bin= 1100010     end=126, end_bin= 1111110 
i=99, bin= 1100011     end=127, end_bin= 1111111 
i=100, bin= 1100100     end=124, end_bin= 1111100 
i=101, bin= 1100101     end=127, end_bin= 1111111 
i=102, bin= 1100110     end=126, end_bin= 1111110 
i=103, bin= 1100111     end=127, end_bin= 1111111 
i=104, bin= 1101000     end=120, end_bin= 1111000 
i=105, bin= 1101001     end=127, end_bin= 1111111 
i=106, bin= 1101010     end=126, end_bin= 1111110 
i=107, bin= 1101011     end=127, end_bin= 1111111 
i=108, bin= 1101100     end=124, end_bin= 1111100 
i=109, bin= 1101101     end=127, end_bin= 1111111 
i=110, bin= 1101110     end=126, end_bin= 1111110 
i=111, bin= 1101111     end=127, end_bin= 1111111 
i=112, bin= 1110000     end=112, end_bin= 1110000 
i=113, bin= 1110001     end=127, end_bin= 1111111 
i=114, bin= 1110010     end=126, end_bin= 1111110 
i=115, bin= 1110011     end=127, end_bin= 1111111 
i=116, bin= 1110100     end=124, end_bin= 1111100 
i=117, bin= 1110101     end=127, end_bin= 1111111 
i=118, bin= 1110110     end=126, end_bin= 1111110 
i=119, bin= 1110111     end=127, end_bin= 1111111 
i=120, bin= 1111000     end=120, end_bin= 1111000 
i=121, bin= 1111001     end=127, end_bin= 1111111 
i=122, bin= 1111010     end=126, end_bin= 1111110 
i=123, bin= 1111011     end=127, end_bin= 1111111 
i=124, bin= 1111100     end=124, end_bin= 1111100 
i=125, bin= 1111101     end=127, end_bin= 1111111 
i=126, bin= 1111110     end=126, end_bin= 1111110 
i=127, bin= 1111111     end=127, end_bin= 1111111 
i=128, bin= 10000000     end=128, end_bin= 10000000 
i=129, bin= 10000001     end=255, end_bin= 11111111 
i=130, bin= 10000010     end=254, end_bin= 11111110 
i=131, bin= 10000011     end=255, end_bin= 11111111 
i=132, bin= 10000100     end=252, end_bin= 11111100 
i=133, bin= 10000101     end=255, end_bin= 11111111 
i=134, bin= 10000110     end=254, end_bin= 11111110 
i=135, bin= 10000111     end=255, end_bin= 11111111 
i=136, bin= 10001000     end=248, end_bin= 11111000 
i=137, bin= 10001001     end=255, end_bin= 11111111 
i=138, bin= 10001010     end=254, end_bin= 11111110 
i=139, bin= 10001011     end=255, end_bin= 11111111 
i=140, bin= 10001100     end=252, end_bin= 11111100 
i=141, bin= 10001101     end=255, end_bin= 11111111 
i=142, bin= 10001110     end=254, end_bin= 11111110 
i=143, bin= 10001111     end=255, end_bin= 11111111 
i=144, bin= 10010000     end=240, end_bin= 11110000 
i=145, bin= 10010001     end=255, end_bin= 11111111 
i=146, bin= 10010010     end=254, end_bin= 11111110 
i=147, bin= 10010011     end=255, end_bin= 11111111 
i=148, bin= 10010100     end=252, end_bin= 11111100 
i=149, bin= 10010101     end=255, end_bin= 11111111 
i=150, bin= 10010110     end=254, end_bin= 11111110 
i=151, bin= 10010111     end=255, end_bin= 11111111 
i=152, bin= 10011000     end=248, end_bin= 11111000 
i=153, bin= 10011001     end=255, end_bin= 11111111 
i=154, bin= 10011010     end=254, end_bin= 11111110 
i=155, bin= 10011011     end=255, end_bin= 11111111 
i=156, bin= 10011100     end=252, end_bin= 11111100 
i=157, bin= 10011101     end=255, end_bin= 11111111 
i=158, bin= 10011110     end=254, end_bin= 11111110 
i=159, bin= 10011111     end=255, end_bin= 11111111 
i=160, bin= 10100000     end=224, end_bin= 11100000 
i=161, bin= 10100001     end=255, end_bin= 11111111 
i=162, bin= 10100010     end=254, end_bin= 11111110 
i=163, bin= 10100011     end=255, end_bin= 11111111 
i=164, bin= 10100100     end=252, end_bin= 11111100 
i=165, bin= 10100101     end=255, end_bin= 11111111 
i=166, bin= 10100110     end=254, end_bin= 11111110 
i=167, bin= 10100111     end=255, end_bin= 11111111 
i=168, bin= 10101000     end=248, end_bin= 11111000 
i=169, bin= 10101001     end=255, end_bin= 11111111 
i=170, bin= 10101010     end=254, end_bin= 11111110 
i=171, bin= 10101011     end=255, end_bin= 11111111 
i=172, bin= 10101100     end=252, end_bin= 11111100 
i=173, bin= 10101101     end=255, end_bin= 11111111 
i=174, bin= 10101110     end=254, end_bin= 11111110 
i=175, bin= 10101111     end=255, end_bin= 11111111 
i=176, bin= 10110000     end=240, end_bin= 11110000 
i=177, bin= 10110001     end=255, end_bin= 11111111 
i=178, bin= 10110010     end=254, end_bin= 11111110 
i=179, bin= 10110011     end=255, end_bin= 11111111 
i=180, bin= 10110100     end=252, end_bin= 11111100 
i=181, bin= 10110101     end=255, end_bin= 11111111 
i=182, bin= 10110110     end=254, end_bin= 11111110 
i=183, bin= 10110111     end=255, end_bin= 11111111 
i=184, bin= 10111000     end=248, end_bin= 11111000 
i=185, bin= 10111001     end=255, end_bin= 11111111 
i=186, bin= 10111010     end=254, end_bin= 11111110 
i=187, bin= 10111011     end=255, end_bin= 11111111 
i=188, bin= 10111100     end=252, end_bin= 11111100 
i=189, bin= 10111101     end=255, end_bin= 11111111 
i=190, bin= 10111110     end=254, end_bin= 11111110 
i=191, bin= 10111111     end=255, end_bin= 11111111 
i=192, bin= 11000000     end=192, end_bin= 11000000 
i=193, bin= 11000001     end=255, end_bin= 11111111 
i=194, bin= 11000010     end=254, end_bin= 11111110 
i=195, bin= 11000011     end=255, end_bin= 11111111 
i=196, bin= 11000100     end=252, end_bin= 11111100 
i=197, bin= 11000101     end=255, end_bin= 11111111 
i=198, bin= 11000110     end=254, end_bin= 11111110 
i=199, bin= 11000111     end=255, end_bin= 11111111 
i=200, bin= 11001000     end=248, end_bin= 11111000 
i=201, bin= 11001001     end=255, end_bin= 11111111 
i=202, bin= 11001010     end=254, end_bin= 11111110 
i=203, bin= 11001011     end=255, end_bin= 11111111 
i=204, bin= 11001100     end=252, end_bin= 11111100 
i=205, bin= 11001101     end=255, end_bin= 11111111 
i=206, bin= 11001110     end=254, end_bin= 11111110 
i=207, bin= 11001111     end=255, end_bin= 11111111 
i=208, bin= 11010000     end=240, end_bin= 11110000 
i=209, bin= 11010001     end=255, end_bin= 11111111 
i=210, bin= 11010010     end=254, end_bin= 11111110 
i=211, bin= 11010011     end=255, end_bin= 11111111 
i=212, bin= 11010100     end=252, end_bin= 11111100 
i=213, bin= 11010101     end=255, end_bin= 11111111 
i=214, bin= 11010110     end=254, end_bin= 11111110 
i=215, bin= 11010111     end=255, end_bin= 11111111 
i=216, bin= 11011000     end=248, end_bin= 11111000 
i=217, bin= 11011001     end=255, end_bin= 11111111 
i=218, bin= 11011010     end=254, end_bin= 11111110 
i=219, bin= 11011011     end=255, end_bin= 11111111 
i=220, bin= 11011100     end=252, end_bin= 11111100 
i=221, bin= 11011101     end=255, end_bin= 11111111 
i=222, bin= 11011110     end=254, end_bin= 11111110 
i=223, bin= 11011111     end=255, end_bin= 11111111 
i=224, bin= 11100000     end=224, end_bin= 11100000 
i=225, bin= 11100001     end=255, end_bin= 11111111 
i=226, bin= 11100010     end=254, end_bin= 11111110 
i=227, bin= 11100011     end=255, end_bin= 11111111 
i=228, bin= 11100100     end=252, end_bin= 11111100 
i=229, bin= 11100101     end=255, end_bin= 11111111 
i=230, bin= 11100110     end=254, end_bin= 11111110 
i=231, bin= 11100111     end=255, end_bin= 11111111 
i=232, bin= 11101000     end=248, end_bin= 11111000 
i=233, bin= 11101001     end=255, end_bin= 11111111 
i=234, bin= 11101010     end=254, end_bin= 11111110 
i=235, bin= 11101011     end=255, end_bin= 11111111 
i=236, bin= 11101100     end=252, end_bin= 11111100 
i=237, bin= 11101101     end=255, end_bin= 11111111 
i=238, bin= 11101110     end=254, end_bin= 11111110 
i=239, bin= 11101111     end=255, end_bin= 11111111 
i=240, bin= 11110000     end=240, end_bin= 11110000 
i=241, bin= 11110001     end=255, end_bin= 11111111 
i=242, bin= 11110010     end=254, end_bin= 11111110 
i=243, bin= 11110011     end=255, end_bin= 11111111 
i=244, bin= 11110100     end=252, end_bin= 11111100 
i=245, bin= 11110101     end=255, end_bin= 11111111 
i=246, bin= 11110110     end=254, end_bin= 11111110 
i=247, bin= 11110111     end=255, end_bin= 11111111 
i=248, bin= 11111000     end=248, end_bin= 11111000 
i=249, bin= 11111001     end=255, end_bin= 11111111 
i=250, bin= 11111010     end=254, end_bin= 11111110 
i=251, bin= 11111011     end=255, end_bin= 11111111 
i=252, bin= 11111100     end=252, end_bin= 11111100 
i=253, bin= 11111101     end=255, end_bin= 11111111 
i=254, bin= 11111110     end=254, end_bin= 11111110 
i=255, bin= 11111111     end=255, end_bin= 11111111 
i=256, bin= 100000000     end=256, end_bin= 100000000 
i=257, bin= 100000001     end=511, end_bin= 111111111 
i=258, bin= 100000010     end=510, end_bin= 111111110 
i=259, bin= 100000011     end=511, end_bin= 111111111 
i=260, bin= 100000100     end=508, end_bin= 111111100 
i=261, bin= 100000101     end=511, end_bin= 111111111 
i=262, bin= 100000110     end=510, end_bin= 111111110 
i=263, bin= 100000111     end=511, end_bin= 111111111 
i=264, bin= 100001000     end=504, end_bin= 111111000 
i=265, bin= 100001001     end=511, end_bin= 111111111 
i=266, bin= 100001010     end=510, end_bin= 111111110 
i=267, bin= 100001011     end=511, end_bin= 111111111 
i=268, bin= 100001100     end=508, end_bin= 111111100 
i=269, bin= 100001101     end=511, end_bin= 111111111 
i=270, bin= 100001110     end=510, end_bin= 111111110 
i=271, bin= 100001111     end=511, end_bin= 111111111 
i=272, bin= 100010000     end=496, end_bin= 111110000 
i=273, bin= 100010001     end=511, end_bin= 111111111 
i=274, bin= 100010010     end=510, end_bin= 111111110 
i=275, bin= 100010011     end=511, end_bin= 111111111 
i=276, bin= 100010100     end=508, end_bin= 111111100 
i=277, bin= 100010101     end=511, end_bin= 111111111 
i=278, bin= 100010110     end=510, end_bin= 111111110 
i=279, bin= 100010111     end=511, end_bin= 111111111 
i=280, bin= 100011000     end=504, end_bin= 111111000 
i=281, bin= 100011001     end=511, end_bin= 111111111 
i=282, bin= 100011010     end=510, end_bin= 111111110 
i=283, bin= 100011011     end=511, end_bin= 111111111 
i=284, bin= 100011100     end=508, end_bin= 111111100 
i=285, bin= 100011101     end=511, end_bin= 111111111 
i=286, bin= 100011110     end=510, end_bin= 111111110 
i=287, bin= 100011111     end=511, end_bin= 111111111 
i=288, bin= 100100000     end=480, end_bin= 111100000 
i=289, bin= 100100001     end=511, end_bin= 111111111 
i=290, bin= 100100010     end=510, end_bin= 111111110 
i=291, bin= 100100011     end=511, end_bin= 111111111 
i=292, bin= 100100100     end=508, end_bin= 111111100 
i=293, bin= 100100101     end=511, end_bin= 111111111 
i=294, bin= 100100110     end=510, end_bin= 111111110 
i=295, bin= 100100111     end=511, end_bin= 111111111 
i=296, bin= 100101000     end=504, end_bin= 111111000 
i=297, bin= 100101001     end=511, end_bin= 111111111 
i=298, bin= 100101010     end=510, end_bin= 111111110 
i=299, bin= 100101011     end=511, end_bin= 111111111 
i=300, bin= 100101100     end=508, end_bin= 111111100 

使用特权

评论回复
14
xwj| | 2008-12-12 17:29 | 只看该作者

嗯,9楼的方法更好

判断最简单


原来偶走了弯路了

使用特权

评论回复
15
dengm| | 2008-12-12 18:07 | 只看该作者

常规方法 (51 asm)

SUB_CONV_BYTE:

      ;数据先放在A中,A为转换后结果

      MOV R7, A

      MOV R6, A
      MOV A, #0FFH
      MOV R5, A
      SETB C

LP_R:                   ; loop 6 cys
        RLC A
        XCH A, R6
        RRC A      ; >>>> 右
        XCH A, R6
      JNC LP_R
      
      XCH A, R5

LP_L:
        RRC A
        XCH A, R7
        RLC A      ; <<<< 左
        XCH A, R7
      JNC LP_L
              
      ANL A, R5
      RET
       

使用特权

评论回复
16
dengm| | 2008-12-12 18:22 | 只看该作者

ztzer: 请把我上面的, 改为 2 bytes 的.

       ; input: R2:R3
       ; output: B:A
 

使用特权

评论回复
17
ljm810010| | 2008-12-12 18:33 | 只看该作者

哈哈,前辈现身了。

没得说,同样思路,就是写得短一点,快一点,代码少一点。

使用特权

评论回复
18
dspjs| | 2008-12-12 19:12 | 只看该作者

re

9楼的B寄存器是不是可以不要?

使用特权

评论回复
19
ljm810010| | 2008-12-12 19:27 | 只看该作者

是呀,用R6代替更好

使用特权

评论回复
20
John_Lee| | 2008-12-12 19:46 | 只看该作者

我也写一个,大家PK一下

一个循环就够了,循环只计算高位的0,屏蔽低位的0只需&(val | -val)即可。
unsigned int change (unsigned int val) {
    if (val == 0)
        return 0;
    unsigned int result = (unsigned int) -1;
    unsigned int tmp = val;
    while ((int) tmp > 0) {
        result >>= 1;
        tmp <<= 1;
    }
    return result & (val | -val);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

94

帖子

1

粉丝