[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
感觉2,8,16这些特殊进制(2的正整数次方幂)可以用位运算直接些

TOP

12# zm900612
仅适用于 正数 并且要求 算术右移实现, 想到这个就写出来了, 也可把每位都存入(开头的 0 不存入)变量, if !code!==0 set "code="
  1. @echo off & setlocal enableDelayedExpansion
  2. REM 2147483647=~(1<<31)
  3. set HEX_TAB=0123456789ABCDEF
  4. for /l %%a in () do (
  5.   set /p num="Input a decimal number: "
  6.   set /a "test=1<<31
  7.   <nul set /p="Binary: "
  8.   for /l %%i in (31 -1 0) do (
  9.     set /a "bit=num&test,test>>=1,test&=~(1<<31),bit>>=%%i,bit&=~(1<<31)"
  10.     <nul set /p=!bit!
  11.   )
  12.   echo.
  13.   <nul set /p="Hex.: "
  14.   set /a "test=0xf<<4*(32/4-1)
  15.   for /l %%i in (28 -4 0) do (
  16.     set /a "bit=num&test,test>>=4,test&=(1<<28)-1,bit>>=%%i,bit&=(1<<28)-1"
  17.     for %%p in (!bit!) do <nul set /p=!HEX_TAB:~%%p,1!
  18.   )
  19.   echo.
  20.   <nul set /p="Octal: "
  21.   set /a "test=07<<3*(32/3)" & rem 32=3*10+2
  22.   for /l %%i in (30 -3 0) do ( rem Arithmetic Shift Right >>
  23.     set /a "bit=num&test,test>>=3,test&=(1<<30)-1,bit>>=%%i,bit&=(1<<30)-1"
  24.     <nul set /p=!bit!
  25.   )
  26.   echo.&echo.
  27. )
  28. exit /b
复制代码

TOP

还是只用于正数, 位运算实现, 只显示有效数字
  1. @echo off & setlocal enableDelayedExpansion
  2. REM 2147483647=~(1<<31)
  3. set HEX_TAB=0123456789ABCDEF
  4. for /l %%a in () do (
  5.   set /p num="Input a decimal number: "
  6.   <nul set /p="Binary: "
  7.   set code=
  8.   set /a "test=1<<31
  9.   for /l %%i in (31 -1 0) do (
  10.     set /a "bit=num&test,test>>=1,test&=~(1<<31),bit>>=%%i,bit&=~(1<<31)"
  11.     set "code=!code!!bit!"
  12.     if !code!==0 set code=
  13.   )
  14.   echo !code!
  15.   <nul set /p="Hex.: "
  16.   set code=
  17.   set /a "test=0xf<<4*(32/4-1)
  18.   for /l %%i in (28 -4 0) do (
  19.     set /a "bit=num&test,test>>=4,test&=(1<<28)-1,bit>>=%%i,bit&=(1<<28)-1"
  20.     for %%p in (!bit!) do set "code=!code!!HEX_TAB:~%%p,1!"
  21.     if !code!==0 set code=
  22.   )
  23.   echo !code!
  24.   <nul set /p="Octal: "
  25.   set code=
  26.   set /a "test=07<<3*(32/3)" & rem 32=3*10+2
  27.   for /l %%i in (30 -3 0) do ( rem Arithmetic Shift Right >>
  28.     set /a "bit=num&test,test>>=3,test&=(1<<30)-1,bit>>=%%i,bit&=(1<<30)-1"
  29.     set "code=!code!!bit!"
  30.     if !code!==0 set code=
  31.   )
  32.   echo !code! & echo.
  33. )
  34. exit /b
复制代码

TOP

返回列表