摘要:
在本系列文章的前面几篇中,我们介绍了加法器、减法器、锁存器和存储器组织等,但这些器件目前看上去还是“很笨”,例如加法器和减法器,只能计算8位二进制数;另一方面如果你想得到100个8位二进制数的和,你需要输入所有的数并累加起来,终于完成时,你发现有两个数输入错了,这时你不得不重新输入一遍,重复所有... 阅读全文
摘要:
在上一篇文章编码:隐匿在计算机软硬件背后的语言(6)--反馈与触发器中,我们知道一个反向器、两个与门和两个或非门可以构成一个D型电平触发器。它可以存储一位信息,为了表达地更清晰,我们把输入端和输出端重新命名,以与功能相符,如下图所示 当写入端为1时,数据输出端与数据输入端同步;当写入端为0时... 阅读全文
摘要:
反向器是一个简单的器件,用一个继电器就可以实现。当我们把反向器的输出连接到输入时,会发生什么呢? 当输入为0时,输出为1;输出连接到输入上,此时输入又变成1,输出值变成0;如此反复。需要特别指出的是,反向器实际上是一个继电器,而继电器从一个状态转换到另一个状态是需要时间的。所以,即使输入和输... 阅读全文
摘要:
上一篇编码:隐匿在计算机软硬件背后的语言(4)--二进制减法器中,我们在减法器中对于减数大于被减数的情况当作溢出处理,实际上是由于加法器无法表示负数(至少在本文之前),本文的主题就是讨论负数的表示。 同样先对十进制进行分析(易于理解),然后过渡到二进制。 我们知道数字是没有界限的,然而我们所用到... 阅读全文
摘要:
在上一篇博文中我们用基本的逻辑门实现了8位二进制数的加法器,本文主题是在上文中加法器的基础上实现8位二进制减法器功能。 加法和减法在某些方面互相补充,但在机制方面这两种运算并不同。加法中会涉及到进位,减法中没有进位,而是借位--一种与加法存在本质区别的麻烦机制。下面我们先从十进制的减法开始,逐渐... 阅读全文
摘要:
编译环境:vs2013 系统报错:无法嵌入互操作类型“ADOX.CatalogClass”。请改用适用的接口。 解决方法:选中项目中引入的dll(本例中为Microsoft ADO Ext2.8 for DLL and Security),鼠标右键,选择属性,把“嵌入互操作类型”设置为False... 阅读全文
摘要:
加法是算术运算中最基本的运算,而且加法计算也是计算机要做的唯一工作,减法、乘法和除法都可以利用加法来实现。 这里用基本的逻辑门来搭建一个8位的二进制加法器。我们知道两个1位的比特相加,结果很简单。如下图所示 其中低位叫做加法位,高位叫做进位位。我们将加法位和进位位分开表示,如下图 仔细观察,... 阅读全文
摘要:
1比特是可能存在的最小的信息量,任何小于1比特的内容根本算不上是信息。 信息是指多个可能性中的一种。 最常见的二进制数的表现形式也许就是无处不在的通用产品代码(UPC,Universal Product Code)。 有趣的是,UPC也是二进制码,虽然乍看起来不太像。下面看看UPC是怎样工作的,... 阅读全文
摘要:
C#中Mutex是互斥锁,位于System.Threading 命名空间中。 顾名思义,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。 如果当前有一个线程拥有它,在没有释放之前,其它线程是没有权利拥有它的。我们可以把Mutex看作洗手间,上厕所的人看作线... 阅读全文
摘要:
C#中,我们在创建二维数组的时候,一般使用arr[][]的形式,例如 int[][] aInt = new int[2][]; 但声明二维数组还有一种方法,是使用arr[,]的形式。两者有什么区别呢? 实际上,形如arr[,]只能声明等长的二维数组,例如 int[,] ab1 = new in... 阅读全文