[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
在batman的代码中,可移植性体现在事先求得目标机器的位数,这是一种思路,但毕竟影响了程序一定的效率。如何能在尽量不影响程序效率的前提下同时实现两个要求是要考虑的问题。
    提示:采用位操作很高效,在移位的同时隐含机器位数的判断。

TOP

再来,还是非位运算版的:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a n=1
  3. :lp
  4. set /a n*=2,we+=1
  5. if %n% neq 0 goto lp
  6. set /p var=请输入整数:
  7. if %var% lss 0 set "-=1"&set "var=%var:~1%"
  8. for /l %%a in (1,1,%we%) do (
  9.     if !var! geq 1 (
  10.        set /a yu=var%%2,var/=2
  11.        if defined - set /a yu=1-yu
  12.        set "num=!num!!yu!"
  13.        ) else (
  14.        set "num=!num!0%-%"
  15.     )
  16. )
  17. if defined - call :loop
  18. echo %str%%num%
  19. pause>nul&goto :eof
  20. :loop
  21. set "a=%num:~,1%"
  22. set /a a+=1&if !a! equ 2 set /a a=0
  23. set "str=!a!%str%"&set "num=%num:~1%"
  24. if %a% equ 0 goto loop
复制代码
1

评分人数

    • lhjoanna: 兼顾两个要求,再能位运算就更好了!PB + 8
***共同提高***

TOP

Re:netbenton
这就体现出程序的可移植性了,在你不知道程序将在何种机器上运行的时候,如何能使之适应不同的机器?望兄继续斟酌!

TOP

要求二,应该也要定个位数吧,要么64,要么128,
不然,又怎么逆转呢?

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. :lp
  3. (set n=
  4. set o=
  5. set s=
  6. set ns=
  7. echo.
  8. set /p n=输入一个整数:)
  9. (if "%n%"=="" goto :eof
  10. for /l %%a in (1,1,32) do (
  11.         set/a m=n%%2,n=n^>^>1
  12.         set s=!s!!m:~-1!
  13.         set o=!m:~-1!!o!
  14.         set/a ns=^(ns^<^<1^)+m
  15. )
  16. echo 正二进制:!o!   {%n%}
  17. echo 逆转输出:!s!   {!ns!}
  18. goto :lp)
复制代码

[ 本帖最后由 netbenton 于 2009-4-27 00:36 编辑 ]
2

评分人数

TOP

先来个非位运算的:
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p var=请输入一个整数:
  3. if %var% lss 0 set "-=a"&set "var=%var:~1%"
  4. for /l %%a in (1,1,32) do (
  5.     if !var! geq 1 (
  6.        set /a yu=var%%2,var/=2
  7.        if defined - set /a yu=1-yu
  8.        set "num=!num!!yu!"
  9.        ) else (
  10.        set "num=!num!0"
  11.     )
  12. )
  13. echo %num%
  14. pause>nul
复制代码

[ 本帖最后由 batman 于 2009-4-27 00:19 编辑 ]
***共同提高***

TOP

呵,就是把整数的二进制位按逆序重排一遍,就是要用到 <<  >>  &   |   这几个运算符了。

TOP

用位运算来解决,?一点思路都没有...
技术问题请到论坛发帖求助!

TOP

返回列表