程式:
// 定點小數補碼一位乘(校正法)
// #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粒麥子 在第 個格仔裡賞我 粒麥子 在第 個格仔裡...