試圖執行一個函數來返回一串補碼的二進制補碼。我嘗試了兩個品種,並得到奇怪的結果。使用二進制補碼功能時遇到問題
版本1(不反轉而不是 「1」): 串twosComp(signed int的數目){
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
我一直在嘗試各種這些功能的迭代。我對此一發不可收拾。如果任何人有更好的選擇 - 我非常樂於接受建議。
真的不清楚你的問題是什麼。 – 2013-02-11 03:31:49
如果是這樣,答案是:'〜x + 1' – 2013-02-11 03:33:14
我需要返回位串。 – frankV 2013-02-11 03:34:50