wushaodong 发表于 2015-6-6 09:53:32

为什么16位寄存器能存储2^16-1

这个公式是怎么得到的 那个减一是从2^16计算出来的值减一还是怎么样 求大牛详细解答

南郊居士 发表于 2015-6-6 10:11:38

因为16个1就等于2^16-1啊,自己拿计算器按一下就知道了

或者你这么推论吧:
一个1等于1,也就是2^1-1
两个1等于3,也就是2^2-1
三个1等于7,也就是2^3-1
...
可以得知全都是1的结果为2^(1的数量)-1

当然你也可以这么推
1b=10b-1
11b=100b-1
111b=1000b-1
...
111..(16个)...111=1000...(16个)...000-1
而1000...(16个)...000就是2^16

wushaodong 发表于 2015-6-6 10:35:34

南郊居士 发表于 2015-6-6 10:11
因为16个1就等于2^16-1啊,自己拿计算器按一下就知道了

或者你这么推论吧:


那么那个减一有什么意思

南郊居士 发表于 2015-6-6 10:42:22

wushaodong 发表于 2015-6-6 10:35
那么那个减一有什么意思

减一没什么意思,就好像3可以用4-1来表示是一样的

仅仅是个表示方式而已,这样表示比较简单
如果不这样表示,那么就只能用2^15+2^14+...+2^2+2^1+2^0或者16个1来表示了,你看看浪费多少篇幅

无名侠 发表于 2015-6-6 14:37:23

南郊居士 发表于 2015-6-6 10:42
减一没什么意思,就好像3可以用4-1来表示是一样的

仅仅是个表示方式而已,这样表示比较简单


:curse:减去1是因为计算机地址都是从0开始的。

无名侠 发表于 2015-6-6 14:41:43

首先,这个问题可以去问一下你的小学数学老师。
一位只有两种情况 0 和 1
16位就是 2^16 读作2的16次方
16位寄存器能储存 2^16 个不同的数。
还有一个数是0,所以实际范围是0~2^16-1

wushaodong 发表于 2015-6-6 19:07:33

南郊居士 发表于 2015-6-6 10:42
减一没什么意思,就好像3可以用4-1来表示是一样的

仅仅是个表示方式而已,这样表示比较简单


这个公式不用死记硬背吧因为我还是理解不了 因为我刚接触汇编语言

wushaodong 发表于 2015-6-6 19:09:03

无名侠 发表于 2015-6-6 14:41
首先,这个问题可以去问一下你的小学数学老师。
一位只有两种情况 0 和 1
16位就是 2^16 读作2的16次方
...

还有一个数是0就是因为计算机从0开始编址的吗

南郊居士 发表于 2015-6-6 19:43:32

无名侠 发表于 2015-6-6 14:37
减去1是因为计算机地址都是从0开始的。

答非所问。人家问的是16位寄存器能存储最大的值,跟从几开始有什么关系

wushaodong 发表于 2015-6-6 19:53:12

南郊居士 发表于 2015-6-6 19:43
答非所问。人家问的是16位寄存器能存储最大的值,跟从几开始有什么关系

0~15不是16位了么 怎么还需要减一

南郊居士 发表于 2015-6-6 19:59:51

wushaodong 发表于 2015-6-6 19:07
这个公式不用死记硬背吧因为我还是理解不了 因为我刚接触汇编语言

假如你理解不了,最好记住

再说这个也没什么不好理解的,纯数学知识而已啊
我给你推导一下2^16-1是怎么得出的吧

16位寄存器最大可以表示全1的值,也就是16个1,换算为十进制(因为2^16-1本来就是十进制表示法)为:
SUM=2^0+2^1+2^2+...+2^15(楼主要是不明白这个,建议恶补基础知识,这个实在没得讲了)
将这个值乘以2,得出:
2*SUM=2^1+2^2+...+2^15+2^16
那么用下面这个式子减去上面那个式子,就得出了
2*SUM-SUM=SUM
=(2^1+2^2+...+2^15+2^16)-(2^0+2^1+2^2+...+2^15)
=2^16+(2^15-2^15)+...+(2^2-2^2)+(2^1-2^1)-2^0
=2^16-2^0
=2^16-1

我之前的那些回答是简化理解的说法,假如理解不了可以看纯数学推导,再理解不了就记住
这个公式可以推而广之,对于n位的寄存器,最大可表示2^n-1的数值

南郊居士 发表于 2015-6-6 20:01:20

wushaodong 发表于 2015-6-6 19:53
0~15不是16位了么 怎么还需要减一

楼主你晕菜了吧,看我新回复

无名侠 发表于 2015-6-6 20:13:49

南郊居士 发表于 2015-6-6 19:59
假如你理解不了,最好记住

再说这个也没什么不好理解的,纯数学知识而已啊


这个跟握手问题一样。
小学老师讲过。

南郊居士 发表于 2015-6-6 20:17:41

本帖最后由 南郊居士 于 2015-6-6 20:20 编辑

无名侠 发表于 2015-6-6 20:13
这个跟握手问题一样。
小学老师讲过。

旧问题还没解决,就别引入新问题了,这样更晕
而且用握手问题来解释完全是舍近求远,握手问题的公式是N*(N-1)/2

wushaodong 发表于 2015-6-6 20:28:42

南郊居士 发表于 2015-6-6 19:59
假如你理解不了,最好记住

再说这个也没什么不好理解的,纯数学知识而已啊


你所说的基本知识是什么知识,看来我真的需要恶补一下

南郊居士 发表于 2015-6-6 20:40:20

wushaodong 发表于 2015-6-6 20:28
你所说的基本知识是什么知识,看来我真的需要恶补一下

就是进制转换,不能再基础的基础了,假如楼主不会的话就先学这个,不会进制转换的话你可能连debug都不会用
反复看看我的回复,自己拿笔写写,用计算器按按

个人认为千万不要和“从0开始”之类的概念混淆,那是另外的问题(16位寄存器可以表示多少种数码),用来解释本帖的问题很牵强

wushaodong 发表于 2015-6-6 20:55:15

本帖最后由 wushaodong 于 2015-6-6 20:58 编辑

南郊居士 发表于 2015-6-6 20:40
就是进制转换,不能再基础的基础了,假如楼主不会的话就先学这个,不会进制转换的话你可能连debug都不会 ...

我刚刚用计算器计算16个计算器 2^16 = 100000000000000000

计算5个寄存器(0~4) 2^5=100000

各减去一都变成我想要的结果如果不减一代表什么

南郊居士 发表于 2015-6-6 21:09:04

wushaodong 发表于 2015-6-6 20:55
我刚刚用计算器计算16个计算器 2^16 = 100000000000000000

计算5个寄存器(0~4) 2^5=100000


2^16可以表示16位寄存器可以表示的数码数目。

我这么讲吧,今有数列如下:
0123456789
这个数列中最大的数是9,也就是减1的那个
这个数列中一共有10个数,也就是不减1的那个,即数码数目

假如每一个数码都可以对应一个地址,那么可以表示寻址能力。

wushaodong 发表于 2015-6-6 21:25:01

南郊居士 发表于 2015-6-6 21:09
2^16可以表示16位寄存器可以表示的数码数目。

我这么讲吧,今有数列如下:


我似乎有点明白了,16就是数码数目 无实际意义 减去一才是求出最大值 2^16-1这个公式只能用在二进制那里这样理解有没有错误啊

南郊居士 发表于 2015-6-6 21:35:04

wushaodong 发表于 2015-6-6 21:25
我似乎有点明白了,16就是数码数目 无实际意义 减去一才是求出最大值 2^16-1这个公式只能用在二进制那里...

2^16确实是数码数目,但是并不是无实际意义,不知道楼主有没有学到寻址,2^16是寻址能力的相关内容,也就是“可以表示多少种数码”

2^16-1(推广到2^N-1)只能用于计算二进制数码可以表示的最大值,不能计算其他进制,这一点是没错的
页: [1]
查看完整版本: 为什么16位寄存器能存储2^16-1