作者kevinjl (无神论者-无神得自由)
看板ask-why
标题Re: [请益] 计算机概论的问题
时间Tue Jan 16 07:53:21 2007
※ 引述《sthouse (S踢房子(糟糕岛民))》之铭言:
: ※ 引述《aaronleo (拉拉~)》之铭言:
: : 有两题程式语言的题目
: : 找来找去都没有相关的解答
: : 第一题是 : i++代表的意思是?
: : 解答为: i←i+1
: : 可是我还是不晓得这样是什麽意思
: i++ 就是i+1的意思
: 也有++i的用法,不过有一些差别
: 在同一行执行时当i=0,i++ 和++i
: 其中一个会显示i=1,另一个会显示i=0
简而言之 就是程式设计师懒惰的结果
i++ 原本 要写成 i=i+1
因为太常用了 所以简写
解答 写i←i+1
是因为 i=i+1 是不符合数学逻辑的
因为程式中 = 跟数学中的= 意义不同
不过在计概中 答案如果写 i=i+1 应该也算对
如果老师打错 那就是 迂腐的老师了
i←i+1 就是 把i+1 这个数值 放入i 之中
i是变数 你可以想像成一个容器
当你看到 i=0 就是 把0放到 i中
而 i=i+1 就是 先把i这个容器内的数值 +1 之後
再放入i这个容器中
所以现在 i这个容器 放的值就是 1
再遇到这个 指令 一次 i 的值就会再加1
: : 第二题是:
: : X = 0
: 设定x初始值为0
: : For (i=0; i<5; i++)
: 回圈跑6次,也就是i的初始值为0
: 当i小於五时执行底下的回圈,後面就是让i每执行一次加1
: : X = X + 3;
: 执行这个回圈时,每次x就加3,加完之後放回去x的暂存器里面
: : 解答为18 没有解释运算过程@_@
: : 不晓得有没有人能解答这两题呢
: : 感激不尽 谢谢
x=0
for 回圈开始
i=0 判断 i是否小於5? 是 执行 i++ 即 i+1 此时 i=1
执行X = X + 3 -->X=3
回到回圈 i=0 不会再执行(只执行一次 初始动作)
此时 i=1 判断 i是否小於5? 是 执行 i++ 即 i+1 此时 i=2
执行X = X + 3 -->X=6
回到回圈 i=0 不会再执行(只执行一次 初始动作)
此时 i=2 判断 i是否小於5? 是 执行 i++ 即 i+1 此时 i=3
执行X = X + 3 -->X=9
回到回圈 i=0 不会再执行(只执行一次 初始动作)
此时 i=3 判断 i是否小於5? 是 执行 i++ 即 i+1 此时 i=4
执行X = X + 3 -->X=12
回到回圈 i=0 不会再执行(只执行一次 初始动作)
此时 i=4 判断 i是否小於5? 是 执行 i++ 即 i+1 此时 i=5
执行X = X + 3 -->X=15
回到回圈 i=0 不会再执行(只执行一次 初始动作)
此时 i=5 判断 i是否小於5? 不是 离开回圈
不再 执行X = X + 3 所以 X=15
: 基本上这是很基本的程式,也不是这个版的主旨就是了...(也就是PO错版)
: 如果不确定,就输入到程式里面去跑就知道了
: 用单步执行去看暂存器状态最容易了解
可能那个版的高手 解释出来 他也不容易懂吧
所以我试解释看看
--
台湾的乱源在媒体与政客
媒体与政客会成乱源的原因在教育
关心教育 支持教育改革 才是摆脱此混乱的的根本之道
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.48.9
1F:推 slzhao:对"程式设计师偷懒"有点不同的见解.在早期的CPU,累加的执行 01/16 08:07
2F:→ slzhao:速度跟直接加一个数值是不同的,这样写可明确告诉CPU用累加 01/16 08:08
3F:→ slzhao:而非用一般的加法,对程式最佳化有帮助. 01/16 08:09
4F:推 andrew43:推本文作者与一楼 01/16 08:16
5F:推 littleshan:写 i=i+1 也可以 optimize 啊...compiler 没那麽笨 01/16 09:19
6F:推 H45:因为低阶语言的ADD指令和INC指令的效能是有差的 01/16 10:15
7F:→ H45:另外在Z Spec中,i++是否可以表示成i'=i+1? 01/16 10:16
8F:推 littleshan:add 和 inc 不一定有差 要看 architecture 01/16 11:43
9F:推 H45:同一个architecture会有相同的instruction set吧? 01/16 14:10
10F:→ H45:也许楼上上指的是organization? 01/16 14:12
11F:推 H45:不过我们应该只是讨论为什麽有i++吧.... 01/16 14:16
12F:→ H45:我认为原因就是一楼说的,ADD指令和INC指令的差异 01/16 14:18