<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ 书香墨剑 - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ 书香墨剑 - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 16 May 2026 19:16:42 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/author/demongodyy/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ 书香讲 CS 之五（算术逻辑单元 ALU） ]]>
                </title>
                <description>
                    <![CDATA[ ALU 介绍 上次我们讲到了计算机如何表示和存储数字以及文字，但计算机真正的目标是进行计算、有意义地处理数字，比如把两个数字相加等等。这些事是由计算机的一个叫 “算术逻辑单元（ALU）”的部件来处理的。ALU 是计算机的大脑，也是现代计算机的基石，基本上计算机所有的操作运算都会用到它。 ALU 有2单元，1个算术单元，1个逻辑单元，所以接下来分两块来分别介绍它们。 英特尔 74181，第一个封装在单个芯片内的完整 ALU算术单元 算数单元负责计算机里所有的数字操作，比如加减法等等。要完成“将两个数相加”这个操作，需要制造出新的部件“加法器”,我们会用之前抽象出的“逻辑门” ——与门、或门、非门、异或门——来进行更高层次地抽象，组装成我们想要的部件！ 半加器 最简单的加法电路，就是拿两个比特（0或1）加在一起。它会有2个输入，以及1个输出：两个输入数字的和。 我们的输入和输出都只有1个比特，所以会有以下几种情形出现：  * 0+0=0  * 0+1=1  * 1+0=0  * 1+1=2=10（二进制） 注意，在二进制里没有“2”这个数字，计算出来的结果需要进位，表示为“10 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/computer-science-history-by-shu-xiang-part-five-alu/</link>
                <guid isPermaLink="false">5d512486fbfdee429dc5f6ca</guid>
                
                <dc:creator>
                    <![CDATA[ 书香墨剑 ]]>
                </dc:creator>
                <pubDate>Sun, 05 Jul 2020 08:42:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2019/08/1200px-ALU_symbol-2.svg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="alu-">ALU 介绍</h2><p>上次我们讲到了计算机如何表示和存储数字以及文字，但计算机真正的目标是进行计算、有意义地处理数字，比如把两个数字相加等等。这些事是由计算机的一个叫<strong>“算术逻辑单元（ALU）”</strong>的部件来处理的。<strong>ALU</strong> 是计算机的大脑，也是现代计算机的基石，基本上计算机所有的操作运算都会用到它。</p><p><strong>ALU </strong>有2单元，1个<strong>算术单元</strong>，1个<strong>逻辑单元</strong>，所以接下来分两块来分别介绍它们。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-39.png" class="kg-image" alt="image-39" width="600" height="400" loading="lazy"><figcaption>英特尔 74181，第一个封装在单个芯片内的完整 ALU</figcaption></figure><h2 id="-">算术单元</h2><p><strong>算数单元</strong>负责计算机里所有的数字操作，比如加减法等等。要完成“将两个数相加”这个操作，需要制造出新的部件<strong>“加法器”</strong>,我们会用之前抽象出的<strong>“逻辑门”</strong>——与门、或门、非门、异或门——来进行更高层次地抽象，组装成我们想要的部件！</p><h3 id="--1">半加器</h3><p>最简单的加法电路，就是拿两个比特（0或1）加在一起。它会有2个输入，以及1个输出：两个输入数字的和。</p><p>我们的输入和输出都只有1个比特，所以会有以下几种情形出现：</p><ul><li>0+0=0</li><li>0+1=1</li><li>1+0=0</li><li>1+1=2=10（二进制）</li></ul><p>注意，在二进制里没有“2”这个数字，计算出来的结果需要进位，表示为“10”。发现了什么？这4个加法结果的末尾和之前讲的<strong>“异或门”</strong>的输入输出结果一模一样！于是我们放上一个异或门：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-40.png" class="kg-image" alt="image-40" width="600" height="400" loading="lazy"></figure><p>但我们“1+1”这个运算的结果是“10”，有一个<strong>“进位”</strong>上的数字被置为了“1”，所以我们可以用之前的<strong>“与门”</strong>加入一条<strong>“进位”</strong>输出电路<strong>，</strong>来保存这个<strong>进位</strong>：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-41.png" class="kg-image" alt="image-41" width="600" height="400" loading="lazy"></figure><p>我们就制造出了一个<strong>“半加器”，</strong>把它进行抽象，加入我们的工具箱：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/half-plus.gif" class="kg-image" alt="half-plus" width="600" height="400" loading="lazy"></figure><h3 id="--2">全加器</h3><p><strong>半加器</strong>只能计算1位二进制的运算，如果超过了1位，我们就需要<strong>“全加器”</strong>。想一想我们之前的二进制计算，半加器相加后可能产生<strong>进位</strong>，那之后每一位的计算可能就会有2个对应位的数字加上<strong>“进位”</strong>的数字。因此，我们的全加器就会有3个输入，以及2个输出，它的可能性也多了许多：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-42.png" class="kg-image" alt="image-42" width="600" height="400" loading="lazy"></figure><p>我们可以利用<strong>半加器</strong>来做制作<strong>全加器</strong>，首先用一个半加器将两位数字相加，再把“进位”的数字输入另一个<strong>半加器</strong>，与前一个<strong>半加器</strong>输出的“和”进行运算，最后再用一个<strong>“或门”</strong>来监测是否有新的“进位”：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/full-plus--comp-.gif" class="kg-image" alt="full-plus--comp-" width="600" height="400" loading="lazy"></figure><p>这样就制造出了<strong>全加器！</strong>同样我们把它抽象，加入工具箱：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-43.png" class="kg-image" alt="image-43" width="600" height="400" loading="lazy"></figure><h3 id="8-">8位二进制加法器</h3><p>接下来，让我们看看怎么制作一个8位的加法器。假设我们要把两个名字为数字“A”和数字“B”的8位二进制的数相加。</p><p>首先，我们需要一个<strong>半加器</strong>把这连个数字的最右边一位“A0”和“B0”加起来，得到一个“和”输出和一个“进位”输出。</p><p>然后下一位的数字“A1”和“B1”除了对应相加，还要加上前一位的“进位”输出，因此我们连上一个全加器，同样得到了“和”与“进位”的输出。</p><p>再将上一步的“进位”输出连入下一个全加器就可以计算下一位数字了，以此类推，就可以制造出8位二进制的加法器了：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/8bitplus--comp-.gif" class="kg-image" alt="8bitplus--comp-" width="600" height="400" loading="lazy"></figure><p>注意，我们最后一位的数字计算是有“进位”的，如果两个相加的数过大，在这里产生了进位，结果超出了8位，这就叫做<strong>“溢出（overflow）”</strong>。</p><p><strong>溢出</strong>意味着结果超出了对应位数可以表示的数字，这会导致错误和不可预期的结果。例如以前在8位机上玩“吃豆人”的时候，如果你玩到了第256关（8位二进制最多可以表达0~255），那屏幕上就会出现乱码，游戏就会出错：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-44.png" class="kg-image" alt="image-44" width="600" height="400" loading="lazy"></figure><p>为了避免<strong>“溢出”，</strong>我们可以加更多的<strong>全加器</strong>来制造16位、32位、甚至64位的加法器。代价就是需要更多的<strong>逻辑门</strong>部件来制造，并且每次进位会花一些更多的时间。</p><h3 id="--3">其他操作</h3><p>另外，除了加法，算术单元也可以进行其他的运算，大概有一下这些：</p><ul><li>加法（ADD）</li><li>减法（SUBTRACT）</li><li>增量+1（INCREMENT）</li><li>减量-1（DECREMENT）</li></ul><p>不同的计算也跟<strong>加法器</strong>类似，是用不同的<strong>逻辑门</strong>组合出来的。但是在其中并没有乘法或除法，因为简单的 <strong>ALU</strong> 中并没有专门的器件来处理这两个运算，而是通过重复多次的加法或减法来完成的，例如：</p><pre><code class="language-js">12*5 == 12 + 12 + 12 + 12 + 12
</code></pre><p>但是现代计算机、智能手机等更好的处理器中，为了速度更快，也加入了乘法和除法的运算单元。它们更复杂一些，但也是通过更多个<strong>逻辑门</strong>的各种组合来实现的！</p><h2 id="--4">逻辑单元</h2><p>顾名思义，逻辑单元在计算机内负责执行逻辑操作。比如之前说的“与”，“或”，“非”，“异或”。另外，它还能做简单的数值测试，比如利用许多个<strong>“或门”</strong>，来检测一个8位数字是否为“0”：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-45.png" class="kg-image" alt="image-45" width="600" height="400" loading="lazy"></figure><h2 id="alu--1">ALU 抽象</h2><p>利用大量<strong>逻辑门</strong>的组合，我们可以构建出一个 <strong>ALU</strong>。回到一开始提到的<strong>英特尔74181，</strong>它只能处理4位输入，并且不能直接进行乘除法的计算。即便如此，要构建出它，也用了70个<strong>逻辑门：</strong></p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-46.png" class="kg-image" alt="image-46" width="600" height="400" loading="lazy"></figure><p>仅仅4位的 <strong>ALU </strong>已经如此复杂了，而8位的 <strong>ALU</strong> 更是需要几百个<strong>逻辑门</strong>，因此工程师们在使用 <strong>ALU </strong>的时候，将它<strong>抽象</strong>成了一个符号：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-47.png" class="kg-image" alt="image-47" width="600" height="400" loading="lazy"></figure><p>它接受两个操作数<strong>输入</strong>(InA，InB)，以及1个表示要进行的是哪个运算的操<strong>作代码</strong>(Opcode)，然后<strong>输出</strong>一个结果（Out）。</p><p>另外 <strong>ALU </strong>还会有各种标志位（flag），来表示计算的状态。例如： <strong>进位标志</strong>（Carry flag）表示这次计算有没有进位，<strong>0标志（Zero flag）</strong>表示这次计算的结果是不是为0，这样就可以方便地判断计算是否<strong>溢出，</strong>或者两个输入的数是否<strong>相等</strong>。高级的 ALU 中，会有更多的标志位，可以帮助处理器更快更方便地运算。</p><h2 id="--5">之后</h2><p>目前为止，我们了解了电子计算机是如何在没有齿轮的情况下进行计算的了。接下来，我们会利用 <strong>ALU </strong>来制造计算的 <strong>CPU（中央处理器）</strong>，越来越接近我们现在的计算机了！下次见~</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 书香讲 CS 之四（计算机中的二进制） ]]>
                </title>
                <description>
                    <![CDATA[ 二进制数字 之前我们制作出了逻辑门，让计算机可以表示逻辑“真”或“假”。但是只靠这两个状态，我们没法表达更多的信息，这时，我们就需要了解一些数学了。别紧张，这个可能比你初中学的数学还要简单！ 用一个二进制 的数可以表示“真”或“假”，我们用数字的方式计为“1”或“0”。想要表达更多的信息怎么办呢？让我们想想十进制的数，一个数字可以表示0~9，如果想表示10以上的数字，我们就在前面加上一位，就能表示出0~99的数字。二进制也是同样，通过在前面添加位数，可以表达更多的信息。 用十进制举例来说，数字 183 代表了什么呢？它表示了1个100,8个10以及3个1全部加起来： 183 == 1*100 + 8*10 + 3*1 注意我们乘的每个数都比右边的大10倍，因为每一位数字可以表示10个数字（0~9），只有超过9的才会加一位。这样基于每一位都有10个数字的计数方式，就是十进制。 二进制的原理是一样的，只不过它每一位只有2个可能的数字（0、1），所以我们要乘的每个数都比右边的大两倍，不再是100、10、1，而变成了4、2、1。比如说二进制数101，就代表了1个4、0个2、1个1相 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/computer-science-history-by-shu-xiang-part-four-binary-system/</link>
                <guid isPermaLink="false">5d4d796cfbfdee429dc5f69b</guid>
                
                <dc:creator>
                    <![CDATA[ 书香墨剑 ]]>
                </dc:creator>
                <pubDate>Fri, 09 Aug 2019 13:54:03 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2019/08/712650-20150901130405528-1386591357.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="-">二进制数字</h2><p>之前我们制作出了逻辑门，让计算机可以表示逻辑“真”或“假”。但是只靠这两个状态，我们没法表达更多的信息，这时，我们就需要了解一些数学了。别紧张，这个可能比你初中学的数学还要简单！</p><p>用一个<strong>二进制</strong>的数可以表示“真”或“假”，我们用数字的方式计为“1”或“0”。想要表达更多的信息怎么办呢？让我们想想十进制的数，一个数字可以表示0~9，如果想表示10以上的数字，我们就在前面加上一位，就能表示出0~99的数字。二进制也是同样，通过在前面添加位数，可以表达更多的信息。</p><p>用十进制举例来说，数字 183 代表了什么呢？它表示了1个100,8个10以及3个1全部加起来：</p><pre><code class="language-js">183 == 1*100 + 8*10 + 3*1
</code></pre><p>注意我们乘的每个数都比右边的大10倍，因为每一位数字可以表示10个数字（0~9），只有超过9的才会加一位。这样基于每一位都有10个数字的计数方式，就是<strong>十进制。</strong></p><p>二进制的原理是一样的，只不过它每一位只有2个可能的数字（0、1），所以我们要乘的每个数都比右边的大两倍，不再是100、10、1，而变成了4、2、1。比如说二进制数101，就代表了1个4、0个2、1个1相加，等于十进制的5：</p><pre><code class="language-js">101 == 1*4 + 0*2 + 1*1
</code></pre><p>为了表示更多的信息，我们会有更长的二进制数，比如说10110111，就代表了十进制的183：</p><pre><code class="language-js">10110111 == 128*1 + 0*64 + 1*32 + 1*16 + 0*8 + 1*4 + 1*2 + 1*1 == 183
</code></pre><h2 id="--1">二进制计算</h2><p>二进制的加减计算也很简单，我们同样还是从十进制举例。当我们计算183 + 19 的时候，我们从个位开始，每一位对应相加，如果加出来的结果大于10，就向下一位进一位：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/deci-plus--1-.gif" class="kg-image" alt="deci-plus--1-" width="503" height="564" loading="lazy"></figure><p>同样，我们用二进制来计算，结果是一样的：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/binary-plus--1-.gif" class="kg-image" alt="binary-plus--1-" width="640" height="365" loading="lazy"></figure><h2 id="--2">计算机中的二进制数</h2><p>计算机中，二进制数的每一位叫做<strong>“比特（bit）”</strong>。一个8个比特的数字最小是0，最大是11111111（255），总共能表示256个，也就是2的8次方个不同的数字。</p><p>在计算机中，我们处理的二进制位数都是8位的倍数，以至于我们给每8个比特单独起了个名叫做<strong>“字节（Byte）”</strong>。你可能听过 <strong>KB 、MB、GB、TB，</strong>他们的单位都是字节，前面的字母代表了数量级：KB 代表一千字节，MB 代表一百万字节，GB 代表十亿字节，而 TB 就代表了一万亿个字节，也就是8万亿个“0”和“1”！</p><p>以前我们玩的“8位机”，就代表他们的数据都是用8个比特来表示的。而现在的计算机一般都是64位机。</p><p>一个“8位图像”，就代表它每一个像素点的颜色由8个比特来表示，也就是每个点可以有256种可能的颜色；而“32位图像”就表示每个点可能有2的32次方，也就是 4,294,967,296 这么多种颜色，那可清晰多了！</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-35.png" class="kg-image" alt="image-35" width="640" height="400" loading="lazy"><figcaption>8位图片</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-37.png" class="kg-image" alt="image-37" width="720" height="405" loading="lazy"><figcaption>64位图片</figcaption></figure><h2 id="--3">负数、非整数</h2><p>并不是所有的数字都是正数，一般计算机会用第1位作为标志位来表示正负，“1表示”是负数，“0”表示是正数。例如一个32位的数，第一位表示正负，剩下的31位表示数字，能表示的范围就大概是 -2,147,483,648~2,147,483,648。</p><p>表示小数的规则相对复杂些，目前较常用的是<strong> IEEE 754 标准</strong>。它将32位数设置成了1个<strong>正负标志位（S）</strong>，<strong>8个指数位（E）</strong>，23个<strong>有效数字位（M</strong>），最后表示的数字（V）计算公式如下：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-38.png" class="kg-image" alt="image-38" width="295" height="45" loading="lazy"></figure><h2 id="ascii-">ASCII 码，计算机中的字符表示</h2><p>除了数字以外，计算机还通过给每个字符编上代码的方式，用二进制来表示文字。1963年发明的 <strong>ASCII 码（美国信息交换标准代码）</strong>一直通用到现在。ASCII 码由7位二进制数表示，可以表达128个不同的字符，包括了大写字母、小写字母、数字0-9，大部分标点符号及一些换行符、制表符等特殊符号。</p><p>比如说：字母‘A’就由65表示，字母‘b’是由98表示，标点‘!’就用33表示等等。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-c4b8bfebb149f9ad4e997f9b26db31bd_hd.jpg" class="kg-image" alt="v2-c4b8bfebb149f9ad4e997f9b26db31bd_hd" width="560" height="600" loading="lazy"><figcaption>ASCII 码表</figcaption></figure><h2 id="unicode">UNICODE</h2><p>ASCII 码简单易用，它使用不长于一个字节长度的二进制编码来解决了字符的问题。但是，ASCII 码却有个明显的缺陷：它只能供英语使用，其他国家的文字，比如中文有数千个常用字，根本没法用一个字节来编码。</p><p>各个国家都研究了自己的多字节编码方案，但因为各个国家的编码方案互不通用，导致在不同系统之间，就会产生<strong>乱码</strong>问题。例如，以前我们玩台湾或日本开发的计算机游戏，打开是乱码显示，需要使用转码器才能正常玩耍，就是这个原因。</p><p>1992年，<strong>Unicode</strong> 诞生了，它统一了所有编码的标准，解决了不同国家不同编码标准的问题。常见的 Unicode 是16位的，可以表达超过一百万个字符，足够覆盖所有语言的每个字符了——100多种语言的字母（文字）大概占了12万个位置、剩下的还可以表示各种标点符号、数学符号、甚至 Emoji 表情！</p><h2 id="--4">其他编码</h2><p>除了 ASCII 码，Unicode 编码表示字符以外，还有其他常见的例如 <strong>MP3、PNG、MP4 </strong>等等各种<strong>编码格式，</strong>可以用来表达<strong>声音、图片、视频</strong>等信息。我们在计算机中见到的照片、音乐、电影、游戏、网页、甚至操作系统，它们归根到底都是一串很长的“0、1”比特！</p><h2 id="--5">之后</h2><p>了解了计算机基本的表达形式：二进制，以及它的计算以及编码。接下来，我们就会真正走进计算机的“计算”方式，看看在计算机内部是怎么操作这些二进制，来帮助人们完成工作的。下期见~</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 书香讲 CS 之三（布尔逻辑与逻辑门） ]]>
                </title>
                <description>
                    <![CDATA[ 二进制 我们从机械计算机，升级到了机电计算机，再到了电子计算机，逐渐希望用“电”来代替“机械运作”进行计算。减少了机械设备，就能降低计算机的物理磨损，可以使计算更加可靠，也变得更快。 还记得莱布尼茨的步进计算机吗？它用10个齿的齿轮来代表十进制 数进行计算。然而，当我们试图用电流强弱的程度来表达十进制的时候，却发现受到的干扰太多了（比如计算机电池要没电了，或者电源电压不稳等等）。为了解决这个问题，人们尝试过制造 五进制，三进制的电子计算机，却依然不能进行可靠的计算。于是，可以只用电流“开”，“关”两种状态进行表达的二进制计算机被设计了出来。 二进制只有“真”或“假”两个值，也可以表示成“1”或“0”。当电路闭合，电流流过的时候，表示“真”；电路断开，没有电流流过的时候表示“假”， 这样的方式很难受到外界的干扰，可以让我们的计算机工作的更加稳定！ 逻辑门电路 使用二进制的另外一个原因是，有一整套的数学计算的方法，来专门处理“真”或“假”，那就是布尔代数。它是以19世纪的英国数学家 George Boole  的名字来命名的。 Boole 一直致力于用一种类似常规代数的计算方法，来 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/computer-science-history-by-shu-xiang-part-three-boolean-logic-and-logic-gate/</link>
                <guid isPermaLink="false">5d4cd771fbfdee429dc5f65b</guid>
                
                <dc:creator>
                    <![CDATA[ 书香墨剑 ]]>
                </dc:creator>
                <pubDate>Fri, 09 Aug 2019 02:25:38 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2019/08/bool.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="-">二进制</h2><p>我们从机械计算机，升级到了机电计算机，再到了电子计算机，逐渐希望用“电”来代替“机械运作”进行计算。减少了机械设备，就能降低计算机的物理磨损，可以使计算更加可靠，也变得更快。</p><p>还记得莱布尼茨的步进计算机吗？它用10个齿的齿轮来代表<strong>十进制</strong>数进行计算。然而，当我们试图用电流强弱的程度来表达十进制的时候，却发现受到的干扰太多了（比如计算机电池要没电了，或者电源电压不稳等等）。为了解决这个问题，人们尝试过制造<strong>五进制</strong>，<strong>三进制</strong>的电子计算机，却依然不能进行可靠的计算。于是，可以只用电流“开”，“关”两种状态进行表达的<strong>二进制</strong>计算机被设计了出来。</p><p>二进制只有<strong>“真”</strong>或<strong>“假”</strong>两个值，也可以表示成<strong>“1”</strong>或<strong>“0”</strong>。当电路闭合，电流流过的时候，表示<strong>“真”</strong>；电路断开，没有电流流过的时候表示<strong>“假”，</strong>这样的方式很难受到外界的干扰，可以让我们的计算机工作的更加稳定！</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/binary.gif" class="kg-image" alt="binary" width="478" height="261" loading="lazy"></figure><h2 id="--1">逻辑门电路</h2><p>使用二进制的另外一个原因是，有一整套的数学计算的方法，来专门处理“真”或“假”，那就是<strong>布尔代数。</strong>它是以19世纪的英国数学家 <strong>George Boole</strong> 的名字来命名的。</p><p><strong>Boole </strong>一直致力于用一种类似常规代数的计算方法，来处理亚里士多德哲学中的逻辑问题。对比于代数中的加减乘除，<strong>布尔代数</strong>也有三个基本计算方式，那就是“与”，“或”，“非”。让我们分别来了解一下，并用晶体管制作出这三种基本门电路：</p><h3 id="--2">“非”门</h3><p>“非”运算非常简单，它拥有一个输入和一个输出，运算结果就是把原来输入的结果反转：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-27.png" class="kg-image" alt="image-27" width="472" height="259" loading="lazy"></figure><p>前面提到，晶体管类似于一个水龙头一样，当接通控制电路的时候，半导体导电，输出就有了电流；断开控制电路的时候，输出就没有电流。</p><p>为了制造“非”门，我们需要将晶体管的输入输出极调整一下：我们将晶体管的一极<strong>接地，</strong>另外一极接通输出电路。这样，当我们接通控制电路的时候，电流就直接流入地面，而不会流过输出电路，只有断开控制电路的时候，电流才流过输出电路。想象成我们把水龙头安在了一个大的排水管上，关闭排水管，家里的水管里才有水；打开排水管，家里的水管就没水了。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/not.gif" class="kg-image" alt="not" width="828" height="576" loading="lazy"></figure><h3 id="--3">“与”门</h3><p>“与”门需要两个输入，只有当着两个输入同时为“真”的时候，输出才为“真”，只要任意一个输入为“假”，则输出就为“假”。</p><p>比如：奥巴马是美国总统<strong>与</strong>奥巴马是黑人，结果为真；奥巴马是美国总统<strong>与</strong>奥巴马是白人，结果就为假。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-28.png" class="kg-image" alt="image-28" width="279" height="162" loading="lazy"></figure><p>制造“与”门电路，我们需要将两个晶体管串联起来。这样，用两个晶体管的控制电路作为输入，就必须两个输入端都接通，输出电路才有电流流过。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/and2.gif" class="kg-image" alt="and2" width="456" height="254" loading="lazy"></figure><h3 id="--4">“或”门</h3><p>“或”门同样需要两个输入，并且只要任意一个输入为“真”，则输出就为真；只有当两个输入都为“假”的时候，结果为“假”。</p><p>同样的例子：奥巴马是美国总统<strong>或</strong>奥巴马是白人，结果为真；奥巴马是韩国总统<strong>或</strong>奥巴马是黄种人，结果为假。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-29.png" class="kg-image" alt="image-29" width="232" height="134" loading="lazy"></figure><p>制造“或”门电路，我们同样需要两个晶体管，只不过这次我们需要加一些额外的线路将它们并联：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/or.gif" class="kg-image" alt="or" width="456" height="254" loading="lazy"></figure><h2 id="--5">抽象</h2><p>在真实世界中，即使是职业的程序员或工程师也并不总会去关心电流是怎么在计算机里流动的。人们往往会将常用的零件组装成一个粒度更大，使用更方便的工具，而不需要再去关心零件的细节，这样的过程就叫做<strong>“抽象”。</strong></p><p>同样，我们现在做出了“与”,“或”，“非”三种门电路，人们抽象出了三种符号来分别代替它们：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-eeee039878eebfb8f7f939068fe0e729_hd.png" class="kg-image" alt="v2-eeee039878eebfb8f7f939068fe0e729_hd" width="188" height="94" loading="lazy"><figcaption>与门</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-30.png" class="kg-image" alt="image-30" width="188" height="94" loading="lazy"><figcaption>或门</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-31.png" class="kg-image" alt="image-31" width="188" height="94" loading="lazy"><figcaption>非门</figcaption></figure><h2 id="--6">“异或”门</h2><p>除开这三种基本操作以外，还有个非常有用的布尔运算教做<strong>“异或”</strong>，<strong>异或</strong>和<strong>或</strong>运算非常像，当任意一个输入为“真”的时候，输出为“真”；不同点在于，当两个输入都为“真”，或者两个输入都为“假”的时候，输出为“假”。换句话说，只有当两个输入状态不一样的时候，输出为“真”；两个输入状态一致的时候，输出就为“假”。</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-33.png" class="kg-image" alt="image-33" width="231" height="134" loading="lazy"></figure><p>利用晶体管来制造“异或”门电路就相当复杂了，还好我们可以用<strong>抽象</strong>出来的工具：“与”、“或”、“非”门来组装它：</p><figure class="kg-card kg-image-card"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/xor.gif" class="kg-image" alt="xor" width="456" height="254" loading="lazy"></figure><p>后面会提到，“异或”操作非常有用，所以工程师们将“异或”门<strong>抽象</strong>成了一个“笑脸”的符号 :)D ，这是新的一层<strong>抽象</strong>，赶快把它放进工具箱，再也不用关心它是由哪几个门电路或者多少个晶体管组成的了！</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-34.png" class="kg-image" alt="image-34" width="188" height="94" loading="lazy"><figcaption>异或门</figcaption></figure><h2 id="--7">之后</h2><p>从现在开始，我们终于用电信号来表示我们的数据（真、假）了。并且通过逻辑运算，我们能描述出较为复杂的逻辑，比如：如果小明在周末<strong>或</strong>情人节买了玫瑰<strong>与</strong>两张电影票等人看电影，那么小明谈恋爱了为<strong>真。</strong></p><p>我们用二进制表述出了逻辑，接下来，我们将会看看二进制在计算机里是怎么表示、存储和计算的。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 书香讲 CS 之二（电子计算机） ]]>
                </title>
                <description>
                    <![CDATA[ 机电计算机的弊端 随着人口爆炸型增长，贸易开启、战争需求以及对科学工程更高级的研究，人们对数据计算的要求越来越高。打卡式的机电计算机的出现，代替了人们手工式的计算，极大的提高了计算效率。 世界上最大的机电计算机之一是由 IBM 公司在1944年生产的“哈佛马克一号 ”，这部计算机重达4500公斤，由76万5千个组件，300万个连接点以及800多公里长的导线组成。并且，为了保持它内部的机械装置同步，有一个15米长的连接杆将其连接起来，并由一台5马力的电机来驱动。 哈佛马克一号的左边部分哈佛马克一号的右边部分机电计算机的大脑是继电器， 这是一种电控制器件，当接通控制电流的电路的时候，会控制继电器中的机械臂闭合电路，从而使目标器件通电。在机电计算机中，利用继电器来控制电机的运动，来完成计算的目的。 继电器工作原理然而继电器中的机械臂是有质量的，这导致其无法快速翻转。在1940年代，一个好的继电器大概每秒能翻转50次左右。在哈佛马克一号 上，1秒钟大约能做3次加法，乘法需要6秒，除法则需要15秒，而做类似三角函数的复杂计算需要的时间达到了1分钟以上。 另外，继电器是也是一种机械设备，那 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/computer-science-history-by-shu-xiang-part-two-digital-computer/</link>
                <guid isPermaLink="false">5d4a33ebfbfdee429dc5f612</guid>
                
                <dc:creator>
                    <![CDATA[ 书香墨剑 ]]>
                </dc:creator>
                <pubDate>Wed, 07 Aug 2019 02:22:09 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2019/08/182816.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h3 id="-">机电计算机的弊端</h3><p>随着人口爆炸型增长，贸易开启、战争需求以及对科学工程更高级的研究，人们对数据计算的要求越来越高。打卡式的机电计算机的出现，代替了人们手工式的计算，极大的提高了计算效率。</p><p>世界上最大的机电计算机之一是由 IBM 公司在1944年生产的“<strong>哈佛马克一号</strong>”，这部计算机重达4500公斤，由76万5千个组件，300万个连接点以及800多公里长的导线组成。并且，为了保持它内部的机械装置同步，有一个15米长的连接杆将其连接起来，并由一台5马力的电机来驱动。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-0c5bfa385e9892cc5f469439d315b9bd_hd.jpg" class="kg-image" alt="v2-0c5bfa385e9892cc5f469439d315b9bd_hd" width="720" height="483" loading="lazy"><figcaption>哈佛马克一号的左边部分</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-ffbfc95a0ceb99a41b85537de1aefb8d_hd.jpg" class="kg-image" alt="v2-ffbfc95a0ceb99a41b85537de1aefb8d_hd" width="720" height="481" loading="lazy"><figcaption>哈佛马克一号的右边部分</figcaption></figure><p>机电计算机的大脑是<strong>继电器，</strong>这是一种电控制器件，当接通控制电流的电路的时候，会控制继电器中的机械臂闭合电路，从而使目标器件通电。在机电计算机中，利用继电器来控制电机的运动，来完成计算的目的。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/Relais_Animation.gif" class="kg-image" alt="Relais_Animation" width="610" height="339" loading="lazy"><figcaption>继电器工作原理</figcaption></figure><p>然而继电器中的机械臂是有<strong>质量</strong>的，这导致其无法快速翻转。在1940年代，一个好的继电器大概每秒能翻转50次左右。在<strong>哈佛马克一号</strong>上，1秒钟大约能做3次加法，乘法需要6秒，除法则需要15秒，而做类似三角函数的复杂计算需要的时间达到了1分钟以上。</p><p>另外，继电器是也是一种机械设备，那么机械的磨损也不可避免，而继电器的损坏会直接造成计算错误。在<strong>哈佛马克一号</strong>中大约有3500个继电器，即使每个继电器的寿命能达到10年，平均每天都需要更换一个继电器。</p><p>最后，大型机电计算机持续地运转，造成机器温度较高，而吸引了许多昆虫。当时的工作人员排除计算机故障时，从中拖出了大量的死虫子（bug），这也是计算机术语 "<strong>bug" </strong>的由来。</p><h3 id="--1">电子计算机的开端</h3><p>机电计算机的弊端和上限，让人们必须去寻找更快速稳定的计算机器。还好，科学家们早有准备<strong>，John Ambrose Fleming</strong> 早在1904年就发明了热电子管。</p><p><strong>电子管</strong>是一种玻璃制成的真空管。把两个电极放在真空管中，其中一个电极可以加热，从而发射电子，让另一个电极带上正电荷吸引电子，就可以形成电流，这种让电子单向流动部件就叫做<strong>二极管。</strong></p><p>但是如果要用于计算，我们还需要控制电流的开关。<strong>Lee de Forest </strong>1906年在二极管之间加入了控制电极，制作出了<strong>三极管</strong>。如果向控制电极施加正电荷，则电子就会流动，反之如果施加负电荷，则会阻止电子流动，用于达到控制电路闭合或断开的功能。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-13.png" class="kg-image" alt="image-13" width="720" height="540" loading="lazy"><figcaption>电子三极管原理</figcaption></figure><p><strong>电子管</strong>内没有“机械臂”的运动，减少了磨损，并大大提高了速度，它每秒可以闭合断开电路数千次。<strong>电子管</strong>逐步运用到计算机中，标志着电子计算机的开端。</p><p>1943年12月，<strong>Tommy Flowers </strong>设计出了第一个用真空管的计算机<strong>“巨人一号”</strong>，在英国的<strong>“布莱切利园”</strong>用于破解纳粹通信密码。它采用了1600个真空管，通过插入预先设置好的程序板来进行计算，被认为是第一个可编程的计算机。顺便提一下，两年前，<strong>Alan Mathison Turing（阿兰·图灵）</strong>也在同一个地方用机电计算机<strong>“BOMBE”</strong>破解纳粹的<strong>英格玛密码。</strong></p><p>而1946年在宾夕法尼亚大学制造的电子数值积分计算机<strong>“ENIAC”</strong>，则被认为是第一个真正通用，可编程的电子计算机。它每秒可以进行5000次十位数加减法，据统计，在它运行的10年中，计算量比之前全人类加起来的计算量都多。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-14.png" class="kg-image" alt="image-14" width="720" height="542" loading="lazy"><figcaption>ENIAC</figcaption></figure><p>电子管作为电子计算机及各类电子器件的基础，持续了半个世纪之久。然而电子管也有很大的缺陷：它脆弱易碎，并且像灯泡一样会烧坏。在 <strong>ENIAC </strong>中，因为电子管的数量巨大，平均每半天就会有一个电子管被烧坏。</p><h3 id="--2">现代电子计算机的基础</h3><p>为了进一步降低计算成本，提高计算的可靠性，人们还需要一种新的电子开关。直到1947年，<strong>贝尔实验室</strong>的科学家们发明了<strong>晶体管。</strong></p><p><strong>晶体管</strong>也是一种电子开关，它有两个电极，电极中间有一层有时导电，有时不导电，因此被称为<strong>半导体</strong>的材料。通过加入一个<strong>“门电极”</strong>，通过改变门电极上的电荷，我们可以控制半导体材料的导电性，来开关电路。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/666.gif" class="kg-image" alt="666" width="311" height="309" loading="lazy"><figcaption>晶体三极管工作方式</figcaption></figure><p>贝尔实验室的第一个晶体管每秒就可以开关上万次。而且，比起玻璃制成的电子管，晶体管是固态的。同时，比起电子管来说，晶体管的体积远远比电子管小，导致了更小更便宜并且更稳定的计算机成为了可能。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-11.png" class="kg-image" alt="image-11" width="720" height="400" loading="lazy"><figcaption>电子管（左）与晶体管（右）对比</figcaption></figure><p><strong>IBM</strong> 1957年制造出来的 <strong>IBM608 </strong>是第一个完全采用晶体管制造的计算机。它大约采用了3000个晶体管，每秒钟可以进行4500次加减法或80次乘除法的运算。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-12.png" class="kg-image" alt="image-12" width="370" height="300" loading="lazy"><figcaption>IBM 608</figcaption></figure><p>IBM 很快把所有的产品都采用了晶体管，大大减小计算机的体积和价格，使计算机逐渐进入了办公室与家庭。</p><p>如今，晶体管的普遍体积均小于50纳米，甚至可以达到7纳米的程度（要知道一张纸的厚度大概等于10万纳米！），并且每秒至少能切换上百万次。</p><p>因为很多开发半导体与晶体管的公司在加州的“圣克拉拉谷”，而生产半导体的常见材料是硅，所以人们把这里称为<strong>“硅谷”。William Shockly </strong>搬到这里，创立了“肖克利半导体”，里面的员工后来成立了“仙童半导体”，仙童半导体里面的员工后来创立出了<strong>“英特尔”</strong>——当今世界上最大的计算机芯片制造商。</p><h3 id="--3">之后</h3><p>从<strong>继电器</strong>到<strong>电子管</strong>再到<strong>晶体管</strong>，我们让计算机的控制部分变得非常地快，并且大大减少了体积和成本。但我们如何用晶体管代替机械设备来做运算，从而减少机械磨损呢？我们在接下来解释这个问题。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 书香讲 CS 之一（计算机早期历史） ]]>
                </title>
                <description>
                    <![CDATA[ 手动计算设备 根据记载，人们最早使用的的计算设备是——算盘。 最早的算盘大约在公元前2500年，发明于美索不达米亚。由于当时的社会规模已经远远超出了人们的心算能力（比手指脚趾加一起还多），所以需要帮助计算加减，并且能存储计算状态的手动计算器。 算盘计数：6302715408随着社会的发展，人们还发明了各种计算工具： 星盘，用于在海上计算维度计算尺，用于帮助计算乘除法日晷，用于计算潮汐，天体运动或计时Computer 最早的 Computer 出现于1613年，是一种职业，专指负责计算的人。“Computer”们会借助一些工具来帮助计算，但主要还是靠人力。 “computer”们在工作直到某一天，戈特弗里德·莱布尼茨说：“让优秀的人浪费时间算数简直侮辱尊严，文盲用机器能算得一样准”，于是他发明了步进计算器。 步进计算器有一串齿轮，每个齿轮10个齿，代表0-9，每次超过9就让前面的进一位，减法时反向运动。经过巧妙的设计，可以方便地进行多次加减法，来完成乘法和除法。 莱布尼茨步进计算器 机械化的计算器大大简化了计算器的操作方式，降低了计算人员的学习成本。但是这种计算器在计算较大 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/computer-science-history-by-shu-xiang-part-one-early-history/</link>
                <guid isPermaLink="false">5d48d2bbfbfdee429dc5f606</guid>
                
                <dc:creator>
                    <![CDATA[ 书香墨剑 ]]>
                </dc:creator>
                <pubDate>Tue, 06 Aug 2019 01:07:39 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2019/08/rdn_552b25bca3bda.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h3 id="-">手动计算设备</h3><p>根据记载，人们最早使用的的计算设备是——算盘。</p><p>最早的算盘大约在公元前2500年，发明于美索不达米亚。由于当时的社会规模已经远远超出了人们的心算能力（比手指脚趾加一起还多），所以需要帮助计算加减，并且能存储计算状态的手动计算器。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-6.png" class="kg-image" alt="image-6" width="247" height="145" loading="lazy"><figcaption>算盘计数：6302715408</figcaption></figure><p>随着社会的发展，人们还发明了各种计算工具：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/image-7.png" class="kg-image" alt="image-7" width="640" height="676" loading="lazy"><figcaption>星盘，用于在海上计算维度</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-850d544e2bc6db4e0800fa198ea33e71_hd.jpg" class="kg-image" alt="v2-850d544e2bc6db4e0800fa198ea33e71_hd" width="720" height="405" loading="lazy"><figcaption>计算尺，用于帮助计算乘除法</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/v2-5b7ba1a8ee61376838cb875323af781b_hd.jpg" class="kg-image" alt="v2-5b7ba1a8ee61376838cb875323af781b_hd" width="720" height="480" loading="lazy"><figcaption>日晷，用于计算潮汐，天体运动或计时</figcaption></figure><h3 id="computer">Computer</h3><p>最早的 Computer 出现于1613年，是一种<strong>职业</strong>，专指负责计算的人。<strong>“Computer”</strong>们会借助一些工具来帮助计算，但主要还是靠人力。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-2f69555121ee38249982dad3ea549f5d_hd.jpg" class="kg-image" alt="v2-2f69555121ee38249982dad3ea549f5d_hd" width="720" height="563" loading="lazy"><figcaption>“computer”们在工作</figcaption></figure><p>直到某一天，戈特弗里德·莱布尼茨说：“让优秀的人浪费时间算数简直侮辱尊严，文盲用机器能算得一样准”，于是他发明了<strong>步进计算器。</strong></p><p><br>步进计算器有一串齿轮，每个齿轮10个齿，代表0-9，每次超过9就让前面的进一位，减法时反向运动。经过巧妙的设计，可以方便地进行多次加减法，来完成乘法和除法。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/v2-2456494bff7817fc8d3c29978d690170_hd.jpg" class="kg-image" alt="v2-2456494bff7817fc8d3c29978d690170_hd" width="720" height="528" loading="lazy"><figcaption>莱布尼茨步进计算器</figcaption></figure><p>机械化的计算器大大简化了计算器的操作方式，降低了计算人员的学习成本。但是这种计算器在计算较大的数字时，依然很费时间，往往一次计算要耗时几个小时到几天不等。另外因为造价高昂，因此它并没有得到足够的重视。</p><h3 id="--1">计算表</h3><p>为了快速进行更为复杂的计算（例如指数，对数，三角函数等），人们将计算好的结果提前算好，并制成计算表方便查询。</p><p>在军事中，因为经常需要更为快速、精准的机选，计算表的方式得到了广泛的运用。例如在炮兵中，炮手发射的炮弹会因为风力、温度、大气压等等环境因素的变化而影响射程，而很难打中目标。使用射程表，通过当前的环境因素和射程，来快速计算出当前应当设置的炮的仰角，大大提高了命中率。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/v2-596ac0b41b0c721fbff9bd7dca56f7b4_hd.jpg" class="kg-image" alt="v2-596ac0b41b0c721fbff9bd7dca56f7b4_hd" width="553" height="357" loading="lazy"><figcaption>拿破仑军队中的炮兵计算表</figcaption></figure><p><strong>但是</strong>，如果更换了新的火炮或者炮弹，对应的计算表都需要重新计算，依然会非常耗费人力和时间。</p><h3 id="--2">分析机</h3><p>“随着知识的增长和新工具的诞生，人工劳力会越来越少。”</p><p>Charles Babbage 认为通过机器应该可以自己完成通用的计算过程，并于1837年设计出了<strong>分析机</strong>，可以自动运算一系列运算操作。</p><p>Ada Lovelace 为分析机写了假象的程序，并预言：“未来会诞生一门全新的，强大的，专为分析所用的语言“（计算机程序雏形）。</p><p>因为设计理念过于超前，分析机的制作成本过高，导致这个设备并没有真正制造出来。但是人们通常认为 Charles Babbage 是通用计算机之父，而 Ada Lovelace 是第一个程序员。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-98d518a74ec1ec78afe892c5c46e9321_hd.jpg" class="kg-image" alt="v2-98d518a74ec1ec78afe892c5c46e9321_hd" width="360" height="480" loading="lazy"><figcaption>伦敦科学馆的分析机复制品</figcaption></figure><h3 id="--3">电动计算器</h3><p>19世纪末，计算设备往往用于科学或者工程等特定领域。但是大量移民导致地人口增长，美国政府在1890年的人口普查中遇到了问题。</p><p>美国宪法规定每10年进行一次人口普查，统计各项数据，用于分配联邦资金等等。然而在1890年需要进行普查的时候，发现根据当时人口数量，统计计算各项数据需要13年之久！还没统计计算完就需要进行下一次普查了！</p><p>美国政府找到了 Herman Hollerith，发明了电动机械计算器。这个计算器采用传统步进计算器的方式进行计数，却将其他用于操作的结构用电动设备连接了起来。通过插入打孔的卡片，来控制电路系统，从而代替人力操作来完成统计和计算。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://pic2.zhimg.com/80/v2-13d76e4975ac8f07210b77e143a202fd_hd.jpg" class="kg-image" alt="v2-13d76e4975ac8f07210b77e143a202fd_hd" width="528" height="298" loading="lazy"><figcaption>打孔计算器</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2019/08/v2-c17b0c4e20e000997622eab56ac30e47_hd.jpg" class="kg-image" alt="v2-c17b0c4e20e000997622eab56ac30e47_hd" width="528" height="298" loading="lazy"><figcaption>打孔卡</figcaption></figure><p>这种计算器的运行速度大概是手动计算速度的10倍，在人口普查中为美国政府节省了大约500万美金的开支。</p><p>这个成绩使得越来越多的公司意识到打卡计算器的优势。于是，Hollerith 干脆成立了打卡机器公司，并在1924年与其他机械制造商合并，改名为 <strong>IBM（</strong>国际商用机器公司<strong>）</strong>。</p><h3 id="--4">之后</h3><p>1900年代中叶，随着人口爆炸式增长以及贸易的兴起，社会对数据的计算量大大增加。但是机械计算器在长期运作中造成的磨损而产生的的计算错误以及成本提高问题越来越严重。人们迫切需求更快更灵活的工具处理大量的数据，这为电子计算机的发展奠定了基础，咱们下期讨论。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 书香讲 CS 之零（缘由） ]]>
                </title>
                <description>
                    <![CDATA[ 工业革命以来，人们通过使用机械来代替人力劳作，大大提高了生产力，促进了社会文明的飞跃式发展。 而随着信息化的到来，人们逐渐用自动化来代替了人工操作，同样也是实现社会飞跃发展的又一个“推进器”。 我们所处在的第四次工业革命的信息化时代，计算机、互联网、信息化已经在我们的生活中无处不在。可以说，失去了计算机和互联网，我们的整个社会将直接处于瘫痪状态。 拥抱这个时代，我们就更应该对计算机科学有一些了解。在这个系列中，我希望同你一起从计算机最小的单元——晶体管——开始，慢慢来了解我们的计算机是怎么组成出来的。 这个系列只会涉及到计算机的设计思想，不会涉及 到具体的编程教程，希望任何对计算机感兴趣的人都可以来阅读。另外，我希望通过较好的抽象方式，使得每一个章节都可以单独阅读，并不相互依赖。 最后，这个系列来源于：  * 计算机科学速成课    [https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/av21376839%3Ft%3D572]  * 逻辑的引擎    [https://link.zhihu.com ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/computer-science-history-by-shu-xiang-part-zero/</link>
                <guid isPermaLink="false">5d48d1fdfbfdee429dc5f5fd</guid>
                
                <dc:creator>
                    <![CDATA[ 书香墨剑 ]]>
                </dc:creator>
                <pubDate>Tue, 06 Aug 2019 01:05:14 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2019/08/maxresdefault.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>工业革命以来，人们通过使用机械来代替人力劳作，大大提高了生产力，促进了社会文明的飞跃式发展。</p><p>而随着信息化的到来，人们逐渐用自动化来代替了人工操作，同样也是实现社会飞跃发展的又一个“推进器”。</p><p>我们所处在的第四次工业革命的信息化时代，计算机、互联网、信息化已经在我们的生活中无处不在。可以说，失去了计算机和互联网，我们的整个社会将直接处于瘫痪状态。</p><p>拥抱这个时代，我们就更应该对计算机科学有一些了解。在这个系列中，我希望同你一起从计算机最小的单元——晶体管——开始，慢慢来了解我们的计算机是怎么组成出来的。</p><p>这个系列只会涉及到计算机的设计思想，<strong>不会涉及</strong>到具体的编程教程，希望任何对计算机感兴趣的人都可以来阅读。另外，我希望通过较好的抽象方式，使得每一个章节都可以单独阅读，并不相互依赖。</p><p>最后，这个系列来源于：</p><ul><li><a href="https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/av21376839%3Ft%3D572" rel="nofollow noreferrer">计算机科学速成课</a></li><li><a href="https://link.zhihu.com/?target=https%3A//book.douban.com/subject/1391740/" rel="nofollow noreferrer">逻辑的引擎</a></li></ul><p>欢迎大家自行学习。</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
