| |
|
| 知识库 -> 科技 -> 现在的电脑能不能一秒算出2的64次方? -> 正文阅读 |
|
|
[科技]现在的电脑能不能一秒算出2的64次方? |
| [收藏本文] 【下载本文】 |
|
现在的电脑能不能一秒算出2的64次方? 关注问题?写回答 [img_log] [img_log] 数值计算 现在的电脑能不能一秒算出2的64次方? |
|
你但凡说个3的64次方都行 在二进制里,2的n次方只要左移一位 左移这种操作主流计算机每秒可以做几百亿次 |
|
当然可以,2的64次方可以视作在一个位宽大于64b的寄存器中,1左移64位,甚至可以说这只是一个很简单的二进制信息表示问题,它代表着 10.....0(64个0) 但是这个问题显得有点太过于简单,所以为了让事情稍微变得有趣一点,我们稍微更改一下题目。 现在的CPU怎么在一个时钟周期内算出2的64次方? 那么,这个原本1000个人能回答上来的题目,马上就只剩下100人能答上来了,当然答案是当然可以,我们抓住一个重点,因为这仍然只是一个二进制的信息表示问题,并且这个移位的位数是一个常量,所以我们可以用一个非常简单的连线问题来解决,比如把输入的pin-1接到输出的pin-64,然后输出的其他引脚接0位就可以了,这是一个相当简单的组合逻辑电路,几乎不需要什么实现成本。 |
|
|
当然,对于有集成电路设计或FPGA设计经验的同学来说,这个问题仍然相当的简单,所以为了让问题变得再有趣一点,我们再次修改一下这个问题。 现在的CPU怎么算出2的n次方? 当64换成了一个变量n,很快这个原本100人能答上来的问题只有一半人能答上来了,你发现问题变得棘手起来,因为n是一个未知数,我们无法通过直接连线的方式来实现移位运算,那么能不能这样,我们专门设计一个移位寄存器,每一次运算我们就把这个寄存器左移一位,当然可以,这是一个非常经典的串行移位寄存器,在每个CPU时钟来时,这个寄存器就可以左移(或者右移)一位,这仍然是一个不太复杂的设计,因为多数寄存器位宽不高,多数时候我们使用几个或者几十个时钟周期就能完成运算,而串行移位的实现结构很简单成本极低,因此在很多场景都有这样的设计。 |
|
|
但是,串行移位寄存器有个比较致命的问题,就是比如这个n很大的时候,比如当n=114514,岂不是说我们每次移位运算都需要花费114514个时钟周期,这显然是不可接受的。 因此,我们让问题变得更有趣一点。 现在的CPU怎么在一个时钟周期内算出2的n次方? 马上,这个50个人能答上来的问题就只剩下不到10个人能说出一二了,这是现代CPU实际采用的实现方式了,又称为桶形移位器,它本质上是多级多路选择器(MUX)嵌套组合的结果。 |
|
|
举个栗子,以32b可变移位为例,需要 log2^{32} 也就是5级每一级32个2:1MUX总计160个MUX 不太好理解是不是,为了避免陷入那种懂得不用听,不懂的听不懂的困境,这个问题有点像信息论里那个经典问题 假设有1000杯水,其中一杯水里有毒,问假设给你N头猪,你如何用最少的猪一次性找出哪杯有毒。 当然,现在我们都知道这是一个二进制选择对照问题,所以如果你不想弄明白什么是mux,解这个问题就行了,核心思路是类似的。 |
|
有没有一种可能,电脑这玩意是使用二进制的,2的n次方根本不用算?直接移位就行了? 你如果问它10的64次方,也许更难算一些。 |
|
对现在的电脑来说,算出2的64次方稍微有一点点麻烦。 当然,这里的一点点麻烦也是远小于1秒钟的。 换成2的64次方减一就连这一点点麻烦都没有了。 |
|
这个问题对于电脑而言,就像我问你能不能一秒计算出10的64次方一样 |
|
|
| [收藏本文] 【下载本文】 |
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
|
|
娱乐生活:
电影票房
娱乐圈
娱乐
弱智
火研
中华城市
印度
仙家
六爻
佛门
风水
古钱币交流专用
钓鱼
双色球
航空母舰
网球
乒乓球
中国女排
足球
nba
中超
跑步
象棋
体操
戒色
上海男科
80后
足球: 曼城 利物浦队 托特纳姆热刺 皇家马德里 尤文图斯 罗马 拉齐奥 米兰 里昂 巴黎圣日尔曼 曼联 |
| 网站联系: qq:121756557 email:121756557@qq.com 知识库 |