定點小數補碼一位乘(校正法)

2021-08-27 06:16:19 字數 920 閱讀 2843

程式:

// 定點小數補碼一位乘(校正法)

// #define _crt_secure_no_warnings

#include #include #include using namespace std;

const int n = 4; // 數值位位數

// a,b聯合右移(算術移位)

void rightmove(bitset&a, bitset&b)

bitsetoperator+(bitseta, bitsetb) // 求a,b的算術和

bitsetoperator-(bitseta, bitsetb)

bitsetgetcomplement(bitseta)

return a;

}bitset<2 * n + 1> getcomplement(const bitsethigh, const bitsetlow)

return ans;

}bitset<2 * n + 1> complementonemul(const bitsetx, const bitsety)//傳進被乘數x和乘數y(原碼表示)

rightmove(a, c); // a,c聯合右移

} if (y.test(n))

#pragma endregion 核心演算法

return getcomplement(a, c);

}bitset<2 * n + 1> directmul(const bitsetx, const bitsety)

int main(int argc, char **argv)

return 0;

}

執行結果:

定點原碼 補碼一位乘

移位操作對於任何計算機來說都是不可缺少的操作,各種計算機指令系統中都含有移位指令。這裡首先給大家介紹一下移位操作中的算術移位 原碼右移 補碼右移 算術原碼右移 符號位不變,各位右移,最高有效位補0,末位移出。列如 1.1001 右移 1.0100 0.1101 右移 0.0110 算術補碼右移 符號...

補碼一位乘和補碼二位乘

補碼一位乘 回顧原碼的一位乘 原碼一位乘是數值位之間的計算,計算之前需要對被乘數取絕對值,符號位單獨處理 而補碼乘法的符號位是計算過程中產生的,因此不需要對被乘數取絕對值。被乘數和部分積均取2位符號位,因此乘數和被乘數均要在最高位擴位。補碼擴位原則 正數補0,負數補1.乘數取一位附加位,作為乘數的最...

高精乘 一位乘多位

比較簡單的高精乘,為多位乘多位做鋪墊 題目描述 傳說古代印度有個喜歡下棋的國王叫舍罕,而宰相達依爾是個聰明的大臣,發明了西洋棋。國王玩得愛不惜手,決定獎賞宰相。達依爾說 陛下,我別無他求,請你在這張棋盤的第乙個格仔裡賞我一粒麥子 在第 個格仔裡賞我2粒麥子 在第 個格仔裡賞我 粒麥子 在第 個格仔裡...