软件乘法
来源:互联网 发布:淘宝一件代发平台 编辑:程序博客网 时间:2024/05/16 02:19
#include <stdint.h>#include <stdbool.h>uint64_t _soft_umul_bad(uint32_t a, uint32_t b){ uint64_t ret = 0; int i, j; for (i = 0; i < sizeof(a)*8; i++) for (j = 0; j < sizeof(b)*8; j++) { ret += (uint64_t)((a & (1 << i)) && (b & (1 << j))) << (i + j); } return ret;}uint64_t _soft_umul(uint32_t a, uint32_t b){ uint64_t ret = 0, shift; int i; shift = b; for (i = 0; i < sizeof(b)*8; i++) { if(a & (1 << i)) { ret += shift; } shift <<= 1; } return ret;}int64_t _soft_mul(int32_t a, int32_t b){ bool neg_a, neg_b, neg_re; int64_t ret; neg_a = (a < 0); neg_b = (b < 0); neg_re = neg_a ^ neg_b; a = neg_a ? (-a) : (a); b = neg_b ? (-b) : (b); ret = (int64_t)_soft_umul((uint32_t)a, (uint32_t)b); return neg_re ? (-ret) : (ret);}#include <stdio.h>int main(int argc, char *argv[]){ int32_t a, b; int64_t re_soft, re; if (argc != 0) { fprintf(stderr, "softmul [num1] [num2]\n"); return -1; } sscanf(argv[1], "%d", &a); sscanf(argv[2], "%d", &b); re = (int64_t)a * b; re_soft = _soft_mul(a, b); printf("a = %d, b = %d\n", a, b); printf("re = %lld, re_soft = %lld\n", re, re_soft); return 0;}
0 0
- 软件乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 乘法
- 多种办法用EXCEL软件生成99乘法表
- 第六届蓝桥杯 软件类省赛真题 第七题:加法变乘法
- 《黑客免杀攻防》读书笔记-软件逆向工程(8)乘法与除法的识别与优化原理
- 快速乘法
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
- 交错字符串——动态规划
- vim高亮
- CodeForces 3C Tic-tac-toe 井字棋盘游戏
- Android Studio 发生 Couldn't load jpush175 from loader dalvik.system.PathClassLoader 异常
- 软件乘法
- HOG介绍3
- 获取当前具有输入焦点控件的窗口句柄
- Uva 10881 - Piotr's Ants
- MVC 简单的POST局部刷新
- LeetCode Course Schedule
- 交换机三层转发
- 删除任务栏锁定,任务栏图标的位置,查找可行性文件的方式
- ref和out