|
|
发表于 2011-6-20 22:33:37
|
显示全部楼层
12# zm900612
仅适用于 正数 并且要求 算术右移实现, 想到这个就写出来了, 也可把每位都存入(开头的 0 不存入)变量, if !code!==0 set "code="- @echo off & setlocal enableDelayedExpansion
- REM 2147483647=~(1<<31)
- set HEX_TAB=0123456789ABCDEF
- for /l %%a in () do (
- set /p num="Input a decimal number: "
- set /a "test=1<<31
- <nul set /p="Binary: "
- for /l %%i in (31 -1 0) do (
- set /a "bit=num&test,test>>=1,test&=~(1<<31),bit>>=%%i,bit&=~(1<<31)"
- <nul set /p=!bit!
- )
- echo.
- <nul set /p="Hex.: "
- set /a "test=0xf<<4*(32/4-1)
- for /l %%i in (28 -4 0) do (
- set /a "bit=num&test,test>>=4,test&=(1<<28)-1,bit>>=%%i,bit&=(1<<28)-1"
- for %%p in (!bit!) do <nul set /p=!HEX_TAB:~%%p,1!
- )
- echo.
- <nul set /p="Octal: "
- set /a "test=07<<3*(32/3)" & rem 32=3*10+2
- for /l %%i in (30 -3 0) do ( rem Arithmetic Shift Right >>
- set /a "bit=num&test,test>>=3,test&=(1<<30)-1,bit>>=%%i,bit&=(1<<30)-1"
- <nul set /p=!bit!
- )
- echo.&echo.
- )
- exit /b
复制代码 |
|