雙符號位補碼(用於修正單符號位補碼 法溢位)

2021-10-06 16:28:12 字數 1962 閱讀 3656

**:

/*

用兩個符號位進行修正

正數符號位為 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,少一位是為什麼?解答 有符號位的表達形式是最高位是符號位,其餘是數值,正數的表達方...