一个计算机系统只存在移位(左移或右移)、加减法指令,如何用C语言实现如下计算

freeskyo 2010-08-13 02:04:04
1/ 一个计算机系统只存在移位(左移或右移)、加减法指令,如何用C语言实现如下计算:
(1) n/8 (2) n/9 (3) n*13

...全文
525 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tietao 2010-08-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 of123 的回复:]
(1) n/8 ==> n>>3

(2) n/9 ==> for(i=0;n>=9;i++){n-9}; //i 就是商

(3) n*13 ==> n<<4-n-n-n
[/Quote]

高,学习了,
以前只知道,可以没想到是这样的!!
of123 2010-08-19
  • 打赏
  • 举报
回复
(1) n/8 ==> n>>3

(2) n/9 ==> for(i=0;n>=9;i++){n-9}; //i 就是商

(3) n*13 ==> n<<4-n-n-n
freeskyo 2010-08-17
  • 打赏
  • 举报
回复
继续....

有更好的方法的话,我就很快结贴了!
freeskyo 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 great_bug 的回复:]
至少需要有 移位/比较/加/减 指令,才能实现乘除运算
[/Quote]

没错,都有,我给出答案如下:(不过可能不是最优的)
(1) n/8 ==> n>>3

(2) n/9 ==> n>>3

(3) n*13 ==> n<<3+n+n+n+n+n
Great_Bug 2010-08-17
  • 打赏
  • 举报
回复
至少需要有 移位/比较/加/减 指令,才能实现乘除运算
bluesea87 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 freeskyo 的回复:]

引用 4 楼 bluesea87 的回复:
c语言中你尽管用除和乘好了,如何处理,编译器会帮你安排好


C语言支持,没错;我是目标系统没有乘除的基础上,想出创造性的方法。
[/Quote]

我觉得这话又问题,假设目标cpu只有一条mov指令,那么相应的工具链编译有乘法的c语言是通不过的
用户 昵称 2010-08-16
  • 打赏
  • 举报
回复
没有乘除就不要说C语言。
dreamjack 2010-08-15
  • 打赏
  • 举报
回复
任何计算机的乘除法实现都是这么来的
dreamjack 2010-08-15
  • 打赏
  • 举报
回复
乘法,左移 求和
除法,右移 求减
fcc250513166 2010-08-14
  • 打赏
  • 举报
回复
同意kacyquan
freeskyo 2010-08-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bluesea87 的回复:]
c语言中你尽管用除和乘好了,如何处理,编译器会帮你安排好
[/Quote]

C语言支持,没错;我是目标系统没有乘除的基础上,想出创造性的方法。
bluesea87 2010-08-13
  • 打赏
  • 举报
回复
c语言中你尽管用除和乘好了,如何处理,编译器会帮你安排好
InsaneCode 2010-08-13
  • 打赏
  • 举报
回复
(3)
int i;
int he;
for (i=0;i<13;i++)
{
he+=n;
}

结果为he;
InsaneCode 2010-08-13
  • 打赏
  • 举报
回复
(2)和1一样。
InsaneCode 2010-08-13
  • 打赏
  • 举报
回复
(1)
int i=0;
int n;
int yushu;
while(n> =7)
{
n-=8;
i++;
if(n<=7)
yushu=n;
}

结果i余yushu;

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧