本文共 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
可见,测试正确。
微信搜索:编程笔记本
微信搜索:编程笔记本 微信搜索:编程笔记本