- ベストアンサー
VC++ 2010 Expressで2の補数計算
テキストボックス内に ”:100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF” このようなテキストを入れて左側から2文字づつをHEXとして足し算を行い(":"は無視)、合計の数をビット反転して、最後に+1して2の補数計算をするようして、合計の下二けただけを文字列として付け足して、 :100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF54" このような文字列結果をもう一つのテキストボックスに表示させたいのですが、どのようにしたらできますでしょうか? ご教授よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>合計の数をビット反転して、最後に+1して2の補数計算をするようして、合計の下二けただけを 「最後に」って、+1するチャンスが何度もあるの?。 うぅ~、「合計の下二けただけ」って、なんのために「補数計算をする」んだ?。 -------------------------------------------- (邪推でもしないと、読み解けないなぁ) >VC++ 2010 Expressで2の補数計算 >・・もう一つのテキストボックスに表示させたいのですが、どのようにしたらできますでしょうか? >ご教示よろしくお願い致します。 VC++ 2010 Expressでの表示の仕方が「質問の主旨」のような記述ですが、 カテゴリから邪推して >左側から2文字ずつを、16進2桁として足し算を行い、 >合計数の「2の補数」を、「1の補数に1を加える方法」で求め、 >その「2の補数」下二桁だけを、文字列として付け足して、 これらを、C/C++で記述できない、ということですよね。 ++++++++++++++++++++++++++++++++++++++++++++ なんとか、下のソースで、 :100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF54" となります。 「テキストボックスに表示」するには、ヘルプを見て下さい。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main() { char cOrg[ 128 ] = ":100000004466FFFFFFFFFFFFFFFFFFFFFFFFFFFF", *p; char cAns[ 128 ]; int iVal1, iVal2, iTotal = 0, iHosu; p = cOrg + 1; // ":"は無視 while( *p ){ *p = toupper( *p ); iVal1 = -9; if( ( 'A' <= *p ) && ( 'F' >= *p ) ){ iVal1 = *p - 'A' + 10; iVal1 *= 16; } if( ( '0' <= *p ) && ( '9' >= *p ) ){ iVal1 = *p - '0'; iVal1 *= 16; } if( iVal1 < 0 ) return( 2 ); p++; iVal2 = -9; if( ( 'A' <= *p ) && ( 'F' >= *p ) ){ iVal2 = *p - 'A' + 10; } if( ( '0' <= *p ) && ( '9' >= *p ) ){ iVal2 = *p - '0'; } if( iVal2 < 0 ) return( 3 ); p++; iTotal += iVal1 + iVal2; } iHosu = ~iTotal; // 1の補数 iHosu++; // +1 iHosu &= 0x00FF; // 下二桁(負 → 正) sprintf( cAns, "%s%02X%c", cOrg, iHosu, 0x22 ); printf( "%s\n", cAns ); // 「文字列結果」 return( 1 ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
お礼
回答頂きありがとうございます。大変返事が遅くなり申し訳ありません。何とかVC++を理解できるようになってきてこのプログラムの意味がなんとかですが理解出るようになってきました。まだまだ技量はないのですが、またどうぞよろしくお願いいたします。助かります。