>入力される値は2進数と符号プラス(+)のみとします。
>加算する桁数は4桁とします。
>コマンドライン引数で入力された値を受け取ります。
★コマンドラインから与える引数はひとつで、先頭を 1 とし、中央を + 、中央の次を 1、残りを 0 または 1 とした長さ9の文字列ですね。
(スペースで区切られない=ひとつの引数)
>Hoge.exe xabc+ydef[enter] x,y には 1 が入る。a,b,c,d,e,f には、それぞれ 0 または 1 が入る。
★との前提で暇な年寄りが・・・
(加算方法として)
・入力された '0'(0x30) または '1'(0x31) は文字ですので、0x01 でマスクし、数にして加算。
・下位桁の繰り上げ加算。
・結果を文字にして格納。
なお、プログラムでは、2つの2進数の4桁目( x,y )が 0 の場合(2進数3桁)にも対応します。
#include <stdio.h>
#include <stdlib.h>
void ErrorStop( int iCode, char cCmd[] )
{
printf( "Err %d %s\n", iCode, cCmd );
exit( 0 );
}
void main( int iArgc, char *cArgv[] )
{
int i, iOk, iKetaAge = 0, iSum;
char cKekka[8] = { 0x00 };
if( 2 != iArgc ) ErrorStop( 0, ">Hoge.exe 1010+1010" );
for( i = 3; i >= 0; i-- ){ // c+f,b+e,a+d,x+y
iOk = 0; // 2進数チェック
if( '0' == cArgv[1][i] ) iOk++;
if( '1' == cArgv[1][i] ) iOk++;
if( '0' == cArgv[1][i+5] ) iOk++;
if( '1' == cArgv[1][i+5] ) iOk++;
if( 2 != iOk ) ErrorStop( 1, cArgv[1] );
iSum = iKetaAge;
iSum += 0x01 & cArgv[1][i]; // 文字→数(c,b,a,x)
iSum += 0x01 & cArgv[1][i+5]; // 文字→数(f,e,d,y)
iKetaAge = iSum / 2;
cKekka[i+1] = (char)( 0x30 + ( iSum % 2 ) ); // 数→文字
}
cKekka[0] = ( iKetaAge ) ? '1' : ' '; // 2進数5桁?
printf( "%s %s\n", cArgv[1], cKekka );
}
注:インデントに全角空白を用いています。
補足
記述ミスがありましたので補足させていただきます。 コマンドライン引数で入力された値を受け取ります。そのため、printfk関数以外に、main関数が使用できます。 また、2進数の加算は1桁ずつ加算した方法でコードを記述する。