Board logo

标题: [数值计算] 【已结】求一个十进制/10进制转换成二进制/2进制的批处理程序! [打印本页]

作者: vyuwwen1985    时间: 2009-1-13 14:45     标题: 【已结】求一个十进制/10进制转换成二进制/2进制的批处理程序!

本帖最后由 pcl_test 于 2017-5-29 21:31 编辑

求一个10进制转换成二进制的批处理程序!思路不限制!
作者: Batcher    时间: 2009-1-13 15:15

本论坛搜索“进制”
作者: BBCC    时间: 2009-1-13 16:48

貌似有公式的?
作者: vyuwwen1985    时间: 2009-1-14 11:51

搜了,搜了两三个,都有几个关键地方看不懂!如果程序中关键代码中能加个注释就好了!
作者: Batcher    时间: 2009-1-14 13:11     标题: 回复 4楼 的帖子

哪里不懂就问哪里,自然有人给你解释。
作者: vyuwwen1985    时间: 2009-1-14 15:17     标题: 代码

:10to2
set /p scanf=请输入你想转换的数字:
set var=%scanf%
set num=1
echo 转换前数字为 %var%
call :zhuanhuan

:zhuanhuan
set /a var%num%=%var%%%2    该行没看懂??
set /a var=%var%/2
set /a num+=1
if !var! neq 0 goto :zhuanhuan else goto :echo

:echo
for /l %%a in (%num% -1 1) do set /p=!var%%a!<nul   该行也没看懂??
pause>nul & cls
请热心朋友指教!
作者: Batcher    时间: 2009-1-14 16:57     标题: 回复 6楼 的帖子

set /a var%num%=%var%%%2    该行没看懂??

十进制转二进制可以使用“整除2倒取余”法(如果对此算法不了解,请自行google之),这里就是进行取余计算。

for /l %%a in (%num% -1 1) do set /p=!var%%a!<nul   该行也没看懂??

这里的for就是为了实现上面说的“倒取余”,也就是把整除2的余数倒过来,set /p加上<nul就是为了不换行显示而已(可在本论坛搜索<nul的用法)。
作者: vyuwwen1985    时间: 2009-1-15 10:15     标题: 回复 7楼 的帖子

非常感谢Batcher的热心解答,目前该程序已全部弄懂,我觉得在该段代码中“set /a var%num%=%var%%%2”中变量var%num% 设置的最为巧妙。该变量为下面for命令中“倒取余”做了准备,这也是为什么变量要取var%num%的全部意义。

题外话:批处理现在很少人在用,而且说实在的到目前为止,我身边懂批处理的人好象都没有,如果可以的话,Batcher是否能共同探讨下批处理在现实生活中的意义,或则更俗地说一句,如果精通批处理,是否凭此能找到一份不错的工作?

[ 本帖最后由 vyuwwen1985 于 2009-1-15 11:33 编辑 ]
作者: BBCC    时间: 2009-1-15 10:41

解决一些别的语言难以解决的问题batch很多时候都还可以,但是说要靠batch来赚钱就有点痴人说梦话了.
多学几门语言还是很NB的.
作者: vyuwwen1985    时间: 2009-1-15 11:40     标题: 回复 9楼 的帖子

是啊,否则为什么会有那么多人不懂或者听都没听过批处理呢?bat的出现就不是为开发而诞生的,不过应该来说,只要是编程的话,不论是批处理还是C或是其他什么的,其中的算法和思路应该是可以相互可取的。如此,失落之中也有少许安慰了!
作者: Batcher    时间: 2009-1-15 12:57     标题: 回复 8楼 的帖子

精通批处理,不足以让你找到一份工作;但是它可以让你在平时的工作中如鱼得水。
我在工作中用到批处理的情况:
1、定期清理日志文件
2、文件、文件夹批量操作
3、监控服务器的进程、服务等
4、自动FTP
......

如果你想从事软件开发,建议先把Java、C++等开发语言学好,再考虑批处理。像IBM、Sun等这些软件巨头,他们的软件产品中有很多大量使用批处理的情况,如果你正好精通批处理,可以让你更好的理解其产品的工作原理。
作者: terse    时间: 2009-1-15 15:11

10转2的话 可以简化点
  1. @echo off
  2. set/p h=请输入要转换的十进制数:
  3. cls
  4. set/p=%h% 的二进制为: <nul
  5. :lp
  6. set/a b=!(!(h%%2))
  7. set i=%b%%i%
  8. if %h% geq 2 set/a h=h/2 &&goto lp
  9. echo;%i%
  10. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2