掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビット単位 (ID:61042)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
もう解決されたようですが、作ってみたので別解として載せてみます。 bool BitAdd(bool val1,bool val2,bool &digup){ //戻り値:計算結果 //val1,val2:左、右オペランド //digup:[入出力]桁上がりの有無 bool val3=digup; digup=((val1&&val2)||(val1&&val3)||(val2&&val3)); return val1^val2^val3; } bool Add(const void *src1,const void *src2,void *dst,unsigned int size){ //戻り値:オーバーフローの有無 //src1,src2:左、右オペランド //dst:結果格納先 //size:src1,src2,dstの有効バイト数 unsigned char *b_src1=(unsigned char*)src1; unsigned char *b_src2=(unsigned char*)src2; unsigned char *b_dst=(unsigned char*)dst; unsigned int i,j; bool digup=false; memset(dst,0,size); for(i=0;i<size;i++){ for(j=0;j<8;j++){//注:1byte=8bit前提。 if(BitAdd((b_src1[i])&(0x01<<j),(b_src2[i])&(0x01<<j),digup)){ b_dst[i]|=(0x01<<j); } } } return digup; } int main(){ unsigned long val1=0xba987654,val2=0xfedcba98,ans; if(Add(&val1,&val2,&ans,sizeof(unsigned long)))puts("オーバーフロー発生"); printf("ans=%x",ans); getchar(); return 0; }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.