2進数の記述
Posted feedbacks - Batchfile
バッチには 2進数のリテラル表記はありませんので、お題の例を参考に書いてみました。
なお、最上位ビットは符号として扱われます。
e.g.
C:\>bin 0 1 1 0 1 0 0 1
105
C:\>bin 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2147483647
C:\>bin 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-1
C:\>bin 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-2147483648
遅延環境変数展開を利用しているので、Windows NTでは動作しません。Windows XPで動作
を確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | :: bin.bat
@echo off
setlocal enabledelayedexpansion
set i=0
set t=%*
echo %t: =%|findstr /r "[^01]" >NUL 2>&1
if %ERRORLEVEL% equ 0 (call :usage & goto :EOF)
for %%i in (%*) do set /a i+=1
set t=
for %%i in (%*) do (
set /a i-=1
set t=!t!%%i^<^<!i!
if !i! gtr 0 set t=!t! ^|
)
set /a t="%t%"
endlocal & echo %t%
goto :EOF
:usage
setlocal
echo %~n0 [NUMBER] ...
endlocal
goto :EOF
|



yappy
#4345()
[
C
]
Rating4/6=0.67
そこで、ソース中に2進数を定数として書く方法、またはその代替手段を考えてください。
ある程度の評価基準を示します(できるところまでで構いません)。
・2進数の表示方法は0と1
・桁数は可変長
・コンパイル等の後に最適化等によって定数に変換されることが見込まれる
Cで関数として実装したものを示しておきます。
Rating4/6=0.67-0+
[ reply ]