**:
/*
用兩個符號位進行修正
正數符號位為 00 , 負數符號位為 11
當兩位符號位 為 01, 10時就是溢位,這時取最高位為符號位,其他位為數值位
*/
#includeusing namespace std;
int binary_x[6];
int binary_y[6];
void baseconversion(int n, int b, int base)
//然後根據[n]補 求[-n]補 : 連同符號位按位取反末尾 + 1
//先求 [x] 原碼
while (n)
/*//輸出原碼
for(int i = 0; i < 6; ++i) cout << base[i];
cout << endl;
*///求[n] 的補碼 和[-n] 的補碼
//正數原反補相同
if (flag)
//末尾 + 1
int temp = 1; //判斷是否進製
for(int i = 5; i > 0; --i) else }}
} else
} //輸出補碼
for(int i = 0; i < 6; ++i)
cout << endl;
} int btod (int ans)
} return temp;
}void solve(int binary_x, int binary_y) else
temp = 1;
} else if (binary_x[i] ^ binary_y[i]) else
} else else
temp = 0;
} } //判斷 最高位是否是 01 或者 10
int flag = ans[0] ^ ans[1];
if (flag) cout << "計算結果溢位。" << endl;
else cout << "計算結果沒有溢位。" << endl;
/* //輸出結果的補碼
for (int i = 0; i < 6; ++i) cout << ans[i];
cout << endl;
*/ /*
沒有溢位 那答案是什麼
溢位之後的修正, 最高位為符號位, 其他為數值位
沒有溢位和溢位求解都可以看做 ,最高位為符號位,其他為數值位
思路:1)先判斷符號位,
2)然後 從右往左找第乙個1,包括這個1在內的所有都是原碼部分 (i - n)
3)第乙個1的左邊除了符號位按位取反(i-1位按位取反)
*/ int result = 0;
flag = 0;
if( ans[0] )
else if(flag == 1)
} /*
//輸出結果的原碼
for (int i = 0; i < 6; ++i) cout << ans[i];
cout << endl;
*/flag = 0; //判斷一下是否是 -32
for(int i = 1; i < 6; ++i)
} if (!flag)
else
} else
cout << result << endl;
}int main () else }
return 0;
} /*
*/
測試資料集:自己跑乙個 從 -17 到 +17的所有排列
#includeusing namespace std;
int main()
for(int i = 0; i <= 34; ++i) }
return 0;
}
補碼與符號位取反
先來乙個 c 語言的小例子 include include int main void 對於16位的整數 n 按位與執行將最高位設定為0 符號位 得到的結果卻不是 1 結果是 32767 原因在於有符號整數的實現方式。有符號整數,最容易想到的方式是在最高位加乙個符號位,0表示整數,1表示負數,其它位...
有符號數的符號位擴充套件
char和int型別都是由符號數型別,char型別的變數佔據1個位元組的容量,int型別的變數佔據4個位元組的容量。那麼,把char型別變數賦給int型別變數,會有什麼問題產生?我們會很直觀地認為,把1個位元組大小的資料,放入4個位元組大小的容量,沒有任何問題啊!我們做如下的乙個測試例子 inclu...
有符號位和無符號位。 int8疑問有感
學習go語言的資料型別,看見int int8 int16很是疑惑,int8是什麼意思?查詢資料進行綜合解釋大概如下 int8是有符號位8位整形 128到127 隨即產生疑惑,為什麼負數可表示到 128,正數只能127,少一位是為什麼?解答 有符號位的表達形式是最高位是符號位,其餘是數值,正數的表達方...