ビットの文字列の2の補数を返す関数を実装しようとしています。私は2つの品種を試しましたが、奇妙な結果が得られました。
バージョン1(反転は実行しますが、「+ 1」は実行しません):string twosComp(signed int number){
string twosComp(signed int number) {
if ( number == 0 ) { return "1"; }
if ( number == 1 ) { return "0"; }
if ( number % 2 == 0 ) {
return twosComp(number / 2) + "1";
}
else {
return twosComp(number / 2) + "0";
}
}
バージョン2(「+1」を反転して試行しますが、常に正しくなるとは限りません)
string twosComp(signed int number) {
bool bit = 0;
int size = 3; // not sure what to do about this, value could be -32768 to 32767
string twos;
number = ~abs(number) + 1;
for(int i = 0; i < size; i++) {
//Get right-most bit
bit = number & 1;
if(bit) {
twos += '1';
}
else {
twos += '0';
}
//Shift all bits right one place
number >>= 1;
}
return twos;
} // end twosComp
私はこれらの機能の両方のさまざまな反復を試みてきました。私はこれで蒸気が不足しています。誰かがより良い選択肢を持っているなら-私はこの時点で提案を非常に受け入れています。