编一个程序,完成64位数据(无符号)的加法、减法运算。不允许直接使用64位的数据类型。(未完成)
来源:互联网 发布:高冷男友知乎 编辑:程序博客网 时间:2024/06/08 16:32
#include <stdlib.h>
#include <stdio.h>
#define ADD 1
#define SUB 2
typedef struct Num_64
{
long low;
long high;
}Num_64;
Num_64 Add_64(Num_64 a, Num_64 b);
Num_64 Sub_64(Num_64 a, Num_64 b);
Num_64 ConChToInt(char *p,int len);
Num_64 GetInput()
{
Num_64 input;
char arr[20];
scanf("%s",arr);
input = ConChToInt(arr, strlen(arr));
printf("0X%x%x/n",input.high,input.low);
return input;
}
void main()
{
int choice;
Num_64 a;
Num_64 b;
Num_64 result;
//printf("请选择你要进行的运算:/n1.加法/t2.减法/n");
//scanf("%d",&choice);
//while(1 != choice || 2 != choice)
//{
//printf("您的输入有误,请重新输入:/n");
//scanf("%d",&choice);
//}
//switch(choice)
//{
//case ADD:
//;
//break;
//case SUB:
//;
//break;
//default:
//break;
//}
//printf("请输入两个64位数(十六进制)");
a = GetInput();
/*a.high = 0x01111111;
a.low = 0xcccc1111;
b.high = 0xcccc1111;
b.low = 0xcccc1111;
result = Add_64(a, b);*/
//printf("a + b =%x%x/n",result.high,result.low);
}
Num_64 Add_64(Num_64 a, Num_64 b)
{
Num_64 result;
if(a.low + b.low > 0xFFFFFFFF)
{
result.low = a.low + b.low - 0xFFFFFFFF +1;
result.high = a.high + b.high + 1;
if(result.high > 0xFFFF)
{
printf("相加溢出!/n");
exit(1);
}
else
return result;
}
else
{
result.low = a.low + b.low;
result.high = a.high + b.high;
if(result.high > 0xFFFFFFFF)
{
printf("相加溢出!/n");
exit(1);
}
else
return result;
}
}
Num_64 Sub_64(Num_64 a, Num_64 b)
{
Num_64 result;
if(a.high < b.high || a.high == b.high && a.low < b.low)
{
printf("减数小于被减数!/n");
exit(1);
}
else
{
if(a.low < b.low)
{
result.low = 0xFFFFFFFF - b.low + 1 + a.low;
result.high = a.high - b.high - 1;
}
else
{
result.low = a.low - b.low;
result.high = a.high - b.high;
}
}
return result;
}
Num_64 ConChToInt(char *p,int len)
{
Num_64 input = {0,0};
int i;
//int val;
int power = 1;
for(i = 1; i<= 8; ++i)
{
if(p[len - i] <= '9' && p[len - i] >= '0')
input.low += (p[len - i] - '0') * power;
else if(p[len - i] <= 'f' && p[len - 1] >= 'a')
input.low += (p[len - i] - 'a') * power;
else if(p[len - i] <= 'F' && p[len - 1] >= 'A')
input.low += (p[len - i] - 'A') * power;
else
{
printf("您的输入有误,请重新输入:/n");
input = GetInput();
return input;
}
power *=8;
}
power = 1;
while(0 != (len - i + 1))
{
input.high += p[len - i] * power;
power *=8;
++i;
}
return input;
}
- 编一个程序,完成64位数据(无符号)的加法、减法运算。不允许直接使用64位的数据类型。(未完成)
- 【C语言位运算的应用】如何按bit位翻转一个无符号整型
- 用位运算实现加法和减法
- 64位有符号与无符号类型的整数
- [算法]用位运算的方法实现无符号整数的除法原理及程序
- 位运算实现加法的一个简单例子
- 程序员面试(1):利用位运算完成两个整数的加法运算
- 不用加减乘除写一个加法函数(位运算)
- 在一个无符号整数中翻转位的顺序
- 将一个无符号整数的bit位逆序
- 倒序输出一个无符号二进制数的所有位
- 64位无符号整形格式化符号
- Java用位运算实现加法和减法
- 数据的位运算
- 数据的位运算
- 位运算实现两个数的加法
- 64位与32位对无符号类型处理的区别
- C/C++中的有符号和无符号的位运算问题
- installshield拷贝文件夹
- 使用OLE对象访问Oracle数据库
- 电源管理方案APM和ACPI比较
- Android开发环境搭建全程演示(jdk+eclipse+android sdk)
- c# 日期函数[string.Format----GetDateTimeFormats]格式
- 编一个程序,完成64位数据(无符号)的加法、减法运算。不允许直接使用64位的数据类型。(未完成)
- 谈游戏面试之感言
- ERP咨询顾问必备的7种公关能力
- JS获取对象样式描述
- 红青3D立体图像的原理
- Minix进程的退出
- Linux文件系统管理
- UVA 10090 扩展欧几里得算法
- DirectDraw VS GDI