博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
32位整数模拟64位整数加减法
阅读量:3930 次
发布时间:2019-05-23

本文共 1882 字,大约阅读时间需要 6 分钟。

点击上方蓝字关注我,我们一起学编程

欢迎小伙伴们分享、转载、私信、赞赏

微信搜索:编程笔记本

微信搜索:编程笔记本
微信搜索:编程笔记本

设计一个 64 位整数加减法的程序(不考虑相加溢出)。

#include 
#define ANDVAR 0x8000 // 二进制:1000 0000 0000 0000using namespace std;/* 64位整型类型 */struct Integer64 {
int highPart; // 高32位 unsigned int lowPart; // 低32位};/* 减法,差存在var1中 */void INT64Sub(Integer64& var1, Integer64& var2){
var1.highPart = var1.highPart - var2.highPart; // 高位相减 if (var1.lowPart < var2.lowPart) {
// 若低位不够减,则向高位借位 var1.highPart -= 1; } var1.lowPart = var1.lowPart - var2.lowPart; // unsigned int 做减法时,不够减时自动循环}/* 加法,和存在var1中 */void INT64Add(Integer64& var1, Integer64& var2){
var1.highPart = var1.highPart + var2.highPart; // 高位相加 bool var1Flag = var1.lowPart & ANDVAR; // 若被加数的最高位为1:(1xxx xxxx xxxx xxxx) bool var2Flag = var2.lowPart & ANDVAR; // 若加数的最高位为1: (1xxx xxxx xxxx xxxx) var1.lowPart = var1.lowPart + var2.lowPart; // 低位相加 bool ADDVarFlag = var1.lowPart < var2.lowPart; // 若低位相加后变小,则说明低位产生了溢出 if ((var1Flag && var2Flag) || ADDVarFlag) {
// 若被加数与加数的最高位都为1,则相加后必然会产生溢出,或者是低位越加越小,也表示产生了溢出 var1.highPart += 1; // 进位 }}int main(){
Integer64 Var1, Var2; cout << "---------开始测试64位整数减法---------" << endl; Var1.lowPart = 128; Var1.highPart = 1; Var2.lowPart = 256; Var2.highPart = 2; INT64Sub(Var1, Var2); /* 参考答案: -2 4294967168 */ cout << "高32位:" << Var1.highPart << "\t低32位:" << Var1.lowPart << endl; cout << "---------开始测试64位整数加法---------" << endl; Var1.lowPart = 4294967152; Var1.highPart = 1; Var2.lowPart = 1024; Var2.highPart = 2; INT64Add(Var1, Var2); /* 参考答案: 4 880 */ cout << "高32位:" << Var1.highPart << "\t低32位:" << Var1.lowPart << endl; return 0;}

运行结果为:

---------开始测试64位整数减法---------高32位:-2      低32位:4294967168---------开始测试64位整数加法---------高32位:4       低32位:880

可见,测试正确。

微信搜索:编程笔记本

微信搜索:编程笔记本
微信搜索:编程笔记本

你可能感兴趣的文章
zoj 2478 Encoding
查看>>
zoj 2481 Unique Ascending Array
查看>>
zoj 2475 Benny's Compiler
查看>>
LQX的作业(概率题)(注意用double)
查看>>
C - 上车(简单题)
查看>>
数字游戏
查看>>
G - 久违的月赛之一
查看>>
久违的月赛之二
查看>>
hdu 1520 Anniversary party(基本的树形DP)
查看>>
poj 1192 最优连通子集(树形dp)题目好难懂。。。
查看>>
hdu 2196 Computer(树形DP,两次dfs)好好看。。。
查看>>
poj 1741 Tree(树形DP+分治)难
查看>>
hdu 3452 Bonsai(树形dp)另一种建树的方式
查看>>
树形DP总结
查看>>
hdu 1561 The more, The Better(树形DP+背包)两种建树方式都对
查看>>
ural 1018 Binary Apple Tree(树形DP)建二叉树
查看>>
poj 1155 TELE (树形DP+优化)
查看>>
poj 2486 Apple Tree(树形DP,状态好纠结。。。)
查看>>
Bribing FIPA(树形DP)输入难,学会stringstream的用法,map的使用
查看>>
poj 1947 Rebuilding Roads(树形DP)
查看>>