对内存32字节的数据,也就是256位,以5位分割,计算其整形数值,如11111计算为31,
直到计算到250既可以,一共计算出50个整形保存到数组中,32字节是随机的,在内存中
都是0或1.限C语言实现。
求内存数据转整形的c算法
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 白色一大坨 2018-06-08 04:46关注
你这个,我姑且理解为大整数除法和求余数,我之前刚好写过一个大整数类,贴出代码你看一下:
这样你可以声明一个大数,然后不断除32算余数和商声明部分
#define MAXN 9999 #define MAXSIZE 10 #define DLEN 4 class HugeInt { private: int a[500]; //可以控制大数的位数 int len; //大数长度 bool sign; public: HugeInt(){ len = 1; memset(a, 0, sizeof(a)); } //构造函数 HugeInt(const int); //将一个int类型的变量转化为大数 HugeInt(const char*); //将一个字符串类型的变量转化为大数 HugeInt operator/(const int &) const; //重载除法运算符,大数对一个整数进行相除运算 int operator%(const int &) const; //大数对一个int类型的变量进行取模运算
函数部分:
HugeInt::HugeInt(const char*s) //将一个字符串类型的变量转化为大数 { int t, k, index, l, i; memset(a, 0, sizeof(a)); l = strlen(s); if (s[0] == '-') { sign = false; } else sign = true; len = l / DLEN; if (l%DLEN) len++; index = 0; int end = 0; for (i = l - 1; i >= 0; i -= DLEN) { t = 0; k = i - DLEN + 1; if (k<0) k = 0; for (int j = k; j <= i; j++) { if (s[j] == '-') { t = 0; end = 1; } else { t = t * 10 + s[j] - '0'; } } if (end == 1 && t == 0) { len--; return; } a[index++] = t; } } HugeInt HugeInt::operator/(const int & b) const //大数对一个整数进行相除运算 { HugeInt ret; if (b == 0) return ret; bool bsign = true; if (b < 0) bsign = false; if (sign == bsign) ret.sign = true; else ret.sign = false; int d = abs(b); int i, down = 0; for (i = len - 1; i >= 0; i--) { ret.a[i] = (a[i] + down * (MAXN + 1)) / d; down = a[i] + down * (MAXN + 1) - ret.a[i] * d; } ret.len = len; while (ret.a[ret.len - 1] == 0 && ret.len > 1) ret.len--; return ret; } int HugeInt::operator %(const int & b) const //大数对一个int类型的变量进行取模运算 { int i, d = 0; if (b == 0) return d; for (i = len - 1; i >= 0; i--) { d = ((d * (MAXN + 1)) % b + a[i]) % b; } if (!sign) d = -d; return d; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器